У нас есть приложение, использующее файлы WebForms.aspx почти для всего. В последнее время мы использовали предварительно скомпилированные RazorViews как способ получить пакетную функциональность nicley, просто добавив новую dll в наш проект. Но теперь мы обнаружили, что наши предварительно скомпилированные представления конфликтуют с нашими VirtualPathProviders.
При загрузке VirtualPathProviders из внешних dll приложение пытается загрузить PrecompiledApp.config для всех запросов (и мы не получаем его ). Провайдеры загружены отражением. У нас есть несколько VirtualPathProviders в том же проекте, что и при регистрации, и они работают нормально, но когда мы регистрируем провайдеров из внешних dll с помощью HostingEnvironment.RegisterVirtualPathProvider
, мы получаем эту проблему.
Если мы добавим файл PrecompiledApp.config, он попытается получить _appstart.cshtml и так далее.У нас должны быть все эти файлы ниже, прежде чем пройти исключение:
Мы получаем файл default.cshtml, и остальная часть приложения работает. Поскольку мы хотим использовать файлы apsx -по умолчанию, это неприемлемое решение. Мы также обеспокоены тем, что из-за этого возникнет больше проблем, поскольку мы понятия не имеем, почему это происходит.
Мы пробовали этот способ загрузки наших провайдеров, но по-прежнему получаем ту же ошибку: http://sunali.com/2008/01/09/virtualpathprovider-in-precompiled-web-sites/
Исключение:
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