我有一个ASP.NET MVC 4 Web应用程序。我正在使用RazorGenerator.MsBuild构建目标来预编译我的Razor * .cshtml文件。当我在本地构建我的项目时,一切都很顺利。
当我将项目部署到Azure网站时,我收到此错误:
“C:\ DWASFiles \网站\我的站点名称\ VirtualDirectory0 \网站\库\ MyWebProject \ MyWebProject.csproj” (构建; pipelinePreDeployCopyAllFilesToOneFolder目标)(1) - > (PrecompileRazorFiles目标) - >
C:\ DWASFiles \网站\我的站点名称\ VirtualDirectory0 \网站\库\包\ RazorGenerator.MsBuild.2.0.1 \ TOOLS \ RazorGenerator.targets(21.9): 错误:创建配置节处理程序时发生错误 for system.web.webPages.razor / pages:无法加载文件或程序集 'System.Web.WebPages.Razor,Version = 2.0.0.0,Culture = neutral, PublicKeyToken = 31bf3856ad364e35'或其依赖项之一。该 系统找不到指定的文件。 (C:\ DWASFiles \网站\我的站点名称\ VirtualDirectory0 \网站\库\ MyWebProject \ MyWebProject \意见\的web.config 第7行) [C:\ DWASFiles \网站\我的现场名\ VirtualDirectory0 \站点\库\服务器\ MyWebProject \ MyWebProject \ MyWebProject.csproj]
基本上说它找不到System.Web.WebPages.Razor的版本2.0.0.0
消息指向我的Views \ web.config的第7行,它是configSection.sectionGroup部分中的标准MVC 4行:
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
通过在我的本地计算机上运行Process Monitor,我可以看到它首先执行加载图像
C:\ Program Files(x86)\ Microsoft ASP.NET \ ASP.NET网页\ v1.0 \ Assemblies \ System.Web.WebPages.Razor.dll
然后在
上执行另一个加载图像C:\ MyWebProject \包\ Microsoft.AspNet.WebPages.2.0.30506.0 \ lib中\ net40 \ System.Web.WebPages.Razor.dll
和
上的另一个加载图像C:\ MyWebProject \包\ RazorGenerator.MsBuild.2.0.1 \工具\ V2 \ System.Web.WebPages.Razor.dll
然后最后另一个加载图片
来自GAC的C:\的Windows \ Microsoft.NET \组件\ GAC_MSIL \ System.Web.WebPages.Razor \ v4.0_2.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll
。
我怀疑它在我的计算机而不是Azure网站上运行,因为System.Web.WebPages.Razor的2.0.0.0版本不在Azure网站的GAC中,但版本1.0.0.0就在那里。
在我的主web.config文件中,我在runtime.assemblyBinding部分中有这些行:
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
通过查看Process Monitor,看起来MSBuild正在读取我的web.config文件,但在构建我的Web程序集时没有读取任何其他.config文件(之前它是“C:\ Windows \ Microsoft.NET \ Framework \ v4” .0.30319 \ msbuild.exe.config“)。因此,我看不到任何其他可以放置这些程序集重定向的地方。
有什么好奇的是,如果我通过设置
禁用RazorGenerator,该项目将在Azure网站上完美部署<PrecompileRazorFiles>true</PrecompileRazorFiles>
到
<PrecompileRazorFiles>false</PrecompileRazorFiles>
显然,Razor Generator传递不会发生此禁用,因此结果中没有预编译视图。但是,它仍然运行良好。
因此,这似乎只会影响RazorGenerator“PrecompileRazorFiles”构建目标,并且仅在Azure网站上部署。
如何确保所有构建目标(包括RazorGenerator)始终使用正确的DLL?
对于如何调试这一点的任何其他建议也将非常感激。
答案 0 :(得分:0)
这可能是RazorGenerator特有的问题。该工具的一位作者对此进行了调查,并且能够提出a workaround that fixed this issue。