我有一个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'.
错误。
答案 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功能静态内容功能。
此错误:
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软件包