WebActivatorEx启动方法未运行

时间:2019-09-12 10:38:19

标签: asp.net-mvc iis iis-express sitemap iis-10

我有一个MVC应用程序,我更喜欢使用IIS与IIS Express进行测试/调试。直到片刻之前,一切正常,但现在突然间,当我构建项目并使用Chrome浏览到起始页时,出现以下错误:

  

SiteMapLoader尚未初始化。您必须设置   Global.asax中Application_Start期间的SiteMaps.Loader属性,如果   “ MvcSiteMapProvider_UseExternalDIContainer”设置设置为   在web.config的AppSettings部分中为“ true”。

但是,如果我将项目设置更改为使用IIS Express,则在按F5键时,我的网站将正确加载,没有错误。突然什么地方让我现在要得到这个错误?

在我的Composer类中,这是MvcSiteMapProvider的默认依赖项注入作曲家。它具有应该在应用程序启动时运行的Compose方法-Composer具有以下属性:

[assembly: WebActivatorEx.PostApplicationStartMethod(typeof(MvcSiteMapProvider.DI.Composer), "Compose")]

然而,在IIS上运行时,永远不会调用此Compose方法。我在错误的班级上拥有此属性吗?为什么不应该在Compose之后调用Application_Start。如果我尝试在Compose的末尾显式调用Application_Start,则该应用程序至少会启动,没有SiteMapLoader错误,但会启动,并显示“主页”页面,并尽快在任何地方导航时,都会出现There is no build provider registered for the extension '.cshtml'.错误。

1 个答案:

答案 0 :(得分:0)

此错误:

  

没有为扩展名'.cshtml'注册的构建提供程序。

确保在web.config文件的行下方添加了

<compilation debug="true" targetFramework="4.5.1" optimizeCompilations="false" />

<compilation debug="true" targetFramework="4.0" >
 <!-- In order to provide MVC Intellisense support on Panels during development-->
 <assemblies>
 <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
 <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
 <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
 <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
 <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
 </assemblies>

已安装

iis功能静态内容功能。

enter image description here

此错误:

  

SiteMapLoader尚未初始化。如果在web.config的“应用程序设置”部分中将“ MvcSiteMapProvider_UseExternalDIContainer”设置设置为“ true”,则必须在Global.asax中的Application_Start期间设置SiteMaps.Loader属性。

您可以添加模块,然后按照包装内自述文件中的步骤将其手动添加到DI容器的配置中。

PM>安装软件包MvcSiteMapProvider.MVC [x] .DI。[containerName] .Modules

将x替换为您的MVC版本,并将containerName替换为您正在使用的容器。

安装MvcSiteMapProvider.MVC5.DI.Ninject软件包