MSBuild无法找到一个已经通过web.config进行bindingRedirect的DLL

4
我是一名帮助翻译的助手。

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

当我将项目部署到Azure Web Sites时,我会收到以下错误:

"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):错误:创建系统.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\repository\server\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" />

通过在本地计算机上运行 进程监视器,我可以看到它首先对以下路径进行了“加载图像”操作:

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 Web Sites上运行,因为Azure Web Sites的GAC中没有System.Web.WebPages.Razor的2.0.0.0版本,但有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>

通过查看进程监视器,看起来MSBuild在构建我的Web程序集时读取了我的web.config文件,但没有读取任何其他的.config文件(之前它读取了"C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe.config")。因此,我找不到任何其他可以放置这些程序集重定向的地方。
有趣的是,如果我通过设置禁用RazorGenerator,该项目在Azure Web Sites上部署完美运行。
<PrecompileRazorFiles>true</PrecompileRazorFiles>

<PrecompileRazorFiles>false</PrecompileRazorFiles>

很明显,禁用后Razor生成器不会执行,因此结果中没有预编译视图。但是它仍然可以正常运行。
因此,这似乎只影响了RazorGenerator的“PrecompileRazorFiles”构建目标,并且仅在Azure Web Sites部署时才有影响。
如何确保所有构建目标,包括RazorGenerator使用正确的DLL始终被使用?
如果有其他调试建议,也将不胜感激。
1个回答

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接