Подтвердить что ты не робот

Не удалось найти файл PrecompiledApp.config при работе с предварительно скомпилированными видами Razor и VirtualPathProviders

У нас есть приложение, использующее WebForms.aspx файлы для почти всего. Latley, мы использовали предварительно скомпилированные RazorViews как способ получить функциональные возможности с добавленной подписью, просто отбросив новую DLL в нашем проекте. Но теперь мы обнаружили, что наши прекомпилированные представления, похоже, конфликтуют с нашими VirtualPathProviders.

При загрузке VirtualPathProviders из внешних dll приложение пытается загрузить PrecompiledApp.config для всех запросов (и у нас его нет). Поставщики загружены с отражением. У нас есть некоторые VirtualPathProviders в том же проекте, что и регистрация, и они работают нормально, но когда мы регистрируем поставщиков из внешних dll с помощью HostingEnvironment.RegisterVirtualPathProvider, мы получаем эту проблему.

Если мы добавим файл PrecompiledApp.config, он попытается получить _appstart.cshtml и так далее. Мы должны иметь все эти файлы ниже, прежде чем преодолеть освобождение:

  • PrecompiledApp.config
  • _appstart.cshtml
  • _PageStart.cshtml
  • _ViewStart.cshtml
  • Views/_ViewStart.cshtml
  • Views/Shared/_ViewStart.cshtml
  • default.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
4b9b3361

Ответ 1

Вы уверены, что FileExists вашего VirtualPathProvider вернут false для PrecompiledApp.config?

Флаг IsNonUpdatablePrecompiledApp вызывает FileExists на vpp, прежде чем он действительно вызовет Open, чтобы предотвратить ваше исключение.