4

我有一个 ASP.NET MVC 4 Web 应用程序。我正在使用RazorGenerator.MsBuild构建目标来预编译我的 Razor *.cshtml 文件。当我在本地构建我的项目时,一切都运行良好。

当我将项目部署到 Azure 网站时,我收到此错误:

“C:\DWASFiles\Sites\my-site-name\VirtualDirectory0\site\repository\MyWebProject\MyWebProject.csproj”(构建;pipelinePreDeployCopyAllFilesToOneFolder 目标)(1)->(PrecompileRazorFiles 目标)->
C:\DWASFiles\Sites\my-site-name\VirtualDirectory0\site\repository\packages\RazorGenerator.MsBuild.2.0.1\tools\RazorGenerator.targets(21,9): error : 创建配置节处理程序时出错对于 system.web.webPages.razor/pages:无法加载文件或程序集 'System.Web.WebPages.Razor,Version=2.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35' 或其依赖项之一。该系统找不到指定的文件。(C:\DWASFiles\Sites\my-site-name\VirtualDirectory0\site\repository\MyWebProject\MyWebProject\Views\web.config 第 7 行)[C:\DWASFiles\Sites\my-site-name\VirtualDirectory0\site\存储库\服务器\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 Web Pages\v1.0\Assemblies\System.Web.WebPages.Razor.dll

然后再做另一个加载图像

C:\MyWebProject\packages\Microsoft.AspNet.WebPages.2.0.30506.0\lib\net40\System.Web.WebPages.Razor.dll

还有另一个加载图像

C:\MyWebProject\packages\RazorGenerator.MsBuild.2.0.1\tools\v2\System.Web.WebPages.Razor.dll

最后是另一个加载图像

C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Web.WebPages.Razor\v4.0_2.0.0.0__31bf3856ad364e35\System.Web.WebPages.Razor.dll

来自 GAC。

我怀疑它适用于我的机器而不是 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 程序集时正在读取我的 web.config 文件,但没有读取任何其他 .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?

关于如何调试它的任何其他建议也将不胜感激。

4

1 回答 1

0

这可能是 RazorGenerator 特有的问题。该工具的一位作者对其进行了调查,并提出了解决此问题的解决方法

于 2013-07-26T12:55:44.253 回答