2010-08-25 13 views
21

Ho davvero faticato per giorni su questo argomento.VS 2010 non riesce a eseguire il debug: HttpException nome file non valido per il monitoraggio dei file in LoadControl

Ho migrato un progetto asp.net 3.5 in VS2010 in un progetto di asp.net 4. Tutto ha funzionato bene per diverse settimane.

In qualche modo, ricevo uno strano errore da alcuni giorni. Per chiarire cosa questo progetto appare come:

L'applicazione

E 'un'applicazione basata UserControl e le aree app sono composti da nidificate UserControl gerarchie, che caricano i loro figli controlli nella OnInit(), al fine di ottenere l'evento sistema per funzionare.

(Nota: tutto funziona alla grande in VS2008 e .net 3,5)

L'errore

Ora quando avvio il debug del WebApplication in VS2010, a volte (!!!), un HttpException è generata, con il messaggio:

Nome file non valido per il monitoraggio dei file.

in LoadControl() < - e ora si fa interessante, il parametro per LoadControl è un ~/prefissato UserControl-Path per esempio. ~/Controls/Home/Partial.ascx MA nell'eccezione viene mostrato come una directory, da qualche parte nella directory dei controlli.

Probabilmente VS utilizza un tale approccio per rintracciare internamente i file modificati da ricaricare?

Qualcuno ha riscontrato lo stesso problema? Se sì, ci sono state soluzioni?

Modifica: quando si distribuisce l'applicazione Web, l'errore si annulla. Si verifica solo durante il debug. Al momento ho disabilitato HttpExceptions nel menu debug-> eccezioni. Ma sarei molto lieto di riprenderli anche io ..

+0

Hai mai risolto questo? Sto incontrando la stessa cosa. –

risposta

27

L'errore alla fine si è verificato di nuovo, ma ora ho scoperto che è possibile aggirare il problema ripristinando l'opzione Enable Just My Code nelle Opzioni: Tools->Options->Debugging->General, che in effetti aveva introdotto originariamente il comportamento di debug interrotto.

L'opzione Enable Just My Code deve essere impostata.

0

Ecco una soluzione che richiede l'utilizzo di riflessione, ciò significa che il sito dovrebbe essere in esecuzione in "Full Trust"

using System; 
using System.Reflection; 

namespace Composite 
{ 
    internal static class BuildManagerHelper 
    { 
     /// <summary> 
     /// Gets a user control. Prevents an exception that appears in Visual Studio while debugging 
     /// </summary> 
     /// <param name="virtualPath"></param> 
     /// <returns></returns> 
     public static Type GetCompiledType(string virtualPath) 
     { 
      try 
      { 
       DisableUrlMetadataCaching(true); 

       return System.Web.Compilation.BuildManager.GetCompiledType(virtualPath); 
      } 
      finally 
      { 
       DisableUrlMetadataCaching(false); 
      } 
     } 

     /// <summary> 
     /// Disabling the "url metadata caching" prevents <see cref="System.Web.HttpException" /> in debugger 
     /// </summary> 
     /// <param name="disableCaching"></param> 
     public static void DisableUrlMetadataCaching(bool disableCaching) 
     { 
      #if DEBUG 

      var systemWeb = typeof (System.Web.TraceMode).Assembly; 
      Type cachedPathData = systemWeb.GetType("System.Web.CachedPathData", false); 
      if (cachedPathData == null) return; 

      FieldInfo field = cachedPathData.GetField("s_doNotCacheUrlMetadata", BindingFlags.Static | BindingFlags.NonPublic); 
      if (field == null) return; 

      field.SetValue(null, disableCaching); 

      #endif 
     } 
    } 
} 

P.S. Ho avuto questo problema per molti anni

+0

Come si integra questo nella propria applicazione? –

1

Ho avuto anche questo problema, e avevo già il Enable Just My Code registrato in VS. Tuttavia, dopo aver deselezionato l'opzione, salvato le impostazioni e quindi ricontrollato, il problema è andato via.

Problemi correlati