2012-05-03 6 views
23

Abbiamo un'applicazione che utilizza i file .aspx di WebForm per quasi tutto. Latley utilizza RazorViews precompilati come un modo per ottenere funzionalità ottimali in pacchetti semplicemente rilasciando una nuova DLL nel nostro progetto. Ma ora abbiamo scoperto che le nostre viste precompilate sembrano essere in conflitto con i nostri VirtualPathProvider.Impossibile trovare il file PrecompiledApp.config quando si lavora con viste Razor precompilate e VirtualPathProviders

Durante il caricamento di VirtualPathProvider da DLL esterne, l'applicazione tenta di caricare PrecompiledApp.config per tutte le richieste (e non ce l'abbiamo). I fornitori sono carichi di riflessioni. Abbiamo alcuni VirtualPathProviders nello stesso progetto della registrazione e funzionano bene ma quando registriamo i provider da DLL esterne con HostingEnvironment.RegisterVirtualPathProvider abbiamo questo problema.

Se aggiungiamo il file PrecompiledApp.config, tenta di ottenere _appstart.cshtml e così via. Dobbiamo avere tutti i file avranno sicuramente al di sotto prima di ottenere oltre l'exeption:

  • PreCompiledApp.config
  • _appstart.cshtml
  • _PageStart.cshtml
  • _ViewStart.cshtml
  • Vista/_ViewStart.cshtml
  • Views/Shared/_ViewStart.cshtml
  • default.cshtml

Finiamo in default.cshtml e il resto dell'applicazione funziona. Dal momento che vogliamo utilizzare i file apsx come impostazione predefinita, questa non è una soluzione accettabile. Siamo anche preoccupati che ne emergano altri problemi poiché non abbiamo idea del perché questo sta accadendo.

abbiamo cercato in questo modo di caricare i nostri fornitori, ma abbiamo ancora ottenere lo stesso errore: http://sunali.com/2008/01/09/virtualpathprovider-in-precompiled-web-sites/

L'eccezione:

Could not find file 'C:\MyApp\PrecompiledApp.config'. 

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.IO.FileNotFoundException: Could not find file 'C:\MyApp\PrecompiledApp.config'. 

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. 

Stack Trace: 


[FileNotFoundException: Could not find file 'C:\MyApp\PrecompiledApp.config'.] 
    System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) +12899479 
    System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath) +2481 
    System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy) +229 
    System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share) +102 
    System.Web.Hosting.MapPathBasedVirtualFile.Open() +105 
    System.Web.WebPages.BuildManagerWrapper.IsNonUpdatablePrecompiledApp() +157 
    System.Web.WebPages.BuildManagerWrapper..ctor(VirtualPathProvider vpp, IVirtualPathUtility virtualPathUtility) +48 
    System.Web.WebPages.VirtualPathFactoryManager.<.cctor>b__6() +90 
    System.Lazy`1.CreateValue() +12776623 
    System.Lazy`1.LazyInitValue() +355 
    System.Web.WebPages.ApplicationStartPage.ExecuteStartPage(HttpApplication application) +131 
    System.Web.WebPages.WebPageHttpModule.StartApplication(HttpApplication application, Action`1 executeStartPage, EventHandler applicationStart) +98 
    System.Web.WebPages.WebPageHttpModule.InitApplication(HttpApplication application) +75 
    System.Web.WebPages.WebPageHttpModule.Init(HttpApplication application) +268 
    System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +575 
    System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +352 
    System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +407 
    System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +375 

[HttpException (0x80004005): Could not find file 'C:\MyApp\PrecompiledApp.config'.] 
    System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +11700992 
    System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +141 
    System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +4869221 

Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.272 

risposta

3

Sei sicuro che le FileExists del vostro VirtualPathProvider restituisce false per PrecompiledApp.config?

Il flag IsNonUpddablePrecompiledApp richiama FileExists su vpp prima di chiamare effettivamente Open, per evitare che si verifichi l'eccezione.

Problemi correlati