2012-05-03 28 views
23

Chúng tôi có một ứng dụng sử dụng tệp .aspx của WebForms cho mọi thứ. Latley, chúng tôi đã sử dụng RazorViews được biên dịch trước như một cách để có được chức năng đóng gói gọn gàng bằng cách đơn giản thả một dll mới vào dự án của chúng tôi. Nhưng bây giờ chúng tôi đã phát hiện ra rằng quan điểm biên dịch trước của chúng tôi dường như xung đột với VirtualPathProviders của chúng tôi.Không thể tìm thấy tệp PrecompiledApp.config khi làm việc với chế độ xem Dao phay biên dịch sẵn và VirtualPathProviders

Khi tải VirtualPathProviders từ dll bên ngoài, ứng dụng sẽ cố gắng tải PrecompiledApp.config cho tất cả các yêu cầu (và chúng tôi không có nó). Các nhà cung cấp được tải với sự phản ánh. Chúng tôi có một số VirtualPathProviders trong cùng một dự án như đăng ký và họ làm việc tốt nhưng khi chúng tôi đăng ký nhà cung cấp từ dlls bên ngoài với HostingEnvironment.RegisterVirtualPathProvider chúng tôi nhận được vấn đề này.

Nếu chúng tôi thêm tệp PrecompiledApp.config nó cố gắng để có được _appstart.cshtml và vv. Chúng tôi cần phải có tất cả các file theese dưới đây trước khi nhận được quá khứ exeption:

  • PrecompiledApp.config
  • _appstart.cshtml
  • _PageStart.cshtml
  • _ViewStart.cshtml
  • Views/_ViewStart.cshtml
  • Lượt xem/Chia sẻ/_ViewStart.cshtml
  • default.cshtml

Chúng tôi kết thúc bằng default.cshtml và phần còn lại của ứng dụng hoạt động. Vì chúng tôi muốn sử dụng tệp apsx làm mặc định, đây không phải là giải pháp có thể chấp nhận được. Chúng tôi cũng lo lắng rằng nhiều vấn đề sẽ xuất hiện từ điều này vì chúng tôi không biết tại sao điều này lại xảy ra.

Chúng tôi đã cố gắng theo cách này của tải nhà cung cấp của chúng tôi nhưng chúng tôi vẫn nhận được lỗi tương tự: http://sunali.com/2008/01/09/virtualpathprovider-in-precompiled-web-sites/

Các Ngoại lệ:

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 

Trả lời

3

Bạn có chắc chắn rằng FileExists của VirtualPathProvider của bạn trả về false cho PrecompiledApp.config?

Cờ IsNonUpdatablePrecompiledApp gọi trình FileExists trên vpp trước khi nó thực sự gọi là Mở, để ngăn ngoại lệ của bạn xảy ra.

Các vấn đề liên quan