9

该项目在本地运行良好,仅在发布时出现以下错误:

无法加载文件或程序集“System.Web.Razor”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自 HRESULT 的异常:0x80131040)

过去几个小时在谷歌上搜索问题似乎是我添加到项目中的一个 nuget 包引用了 razor 1 并覆盖了我的 razor 2 dll。我尝试将 razor 2.0.0.0 dll 复制到引用而不是 1 但错误仍然存​​在。这是详细构建输出中显示冲突的地方:

There was a conflict between "System.Web.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" and "System.Web.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35".
1>      "System.Web.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" was chosen because it was primary and "System.Web.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" was not.
1>      References which depend on "System.Web.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" [C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\System.Web.Razor.dll].
1>          C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\System.Web.Razor.dll
1>            Project file item includes which caused reference "C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\System.Web.Razor.dll".
1>              System.Web.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
1>      References which depend on "System.Web.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" [C:\Users\Jack\SkyDrive\LessonUp.Current\packages\RazorEngine.3.0.8\lib\net40\System.Web.Razor.dll].
1>          C:\Users\Jack\SkyDrive\LessonUp.Current\packages\Microsoft.AspNet.WebPages.2.0.20710.0\lib\net40\System.Web.WebPages.Razor.dll
1>            Project file item includes which caused reference "C:\Users\Jack\SkyDrive\LessonUp.Current\packages\Microsoft.AspNet.WebPages.2.0.20710.0\lib\net40\System.Web.WebPages.Razor.dll".
1>              System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL 
1>              Recaptcha

从那里它继续根据剃刀 2 列出其他软件包。

我添加到项目中的包是:Recaptcha、Recaptcha.mvcModel 和 Postal。
有谁知道我可以采取哪些步骤来解决这个问题?
让我知道是否有更多信息可以提供可能导致解决方案的信息。

4

5 回答 5

5

确保引用 2.0 dll 并复制 local = true,然后尝试在 web.config 中添加程序集绑定重定向:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Razor" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
  </dependentAssembly>
</assemblyBinding?
于 2013-02-13T23:14:44.723 回答
1

我在 MVC4 项目中使用 Postal 0.8.0 时遇到了同样的问题。当您使用 NuGet 安装 Postal 时,它会替换System.Web.Razor 2.0System.Web.Razor 1.0. 我不得不删除对的引用System.Web.Razor 1.0,然后重新添加到System.Web.Razor 2.0. 您还必须在“属性”中将“复制本地”设置为,当然还要重新构建项目。一旦我这样做了 VS2012 将其复制到部署的 bin 目录中,问题就解决了。TrueSystem.Web.RazorSystem.Web.Razor.dll

Postal 还将这些依赖项添加到 web.config。我删除了它们,它仍然可以正常工作。

<dependentAssembly>
    <assemblyIdentity name="System.Web.Razor" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-1.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
<dependentAssembly>
    <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-1.3.0.0" newVersion="1.3.0.0" />
</dependentAssembly>
<dependentAssembly>
    <assemblyIdentity name="RazorEngine" publicKeyToken="9ee697374c7e744a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.0.8.0" newVersion="3.0.8.0" />
</dependentAssembly>
于 2013-02-28T20:34:10.687 回答
0

检查您的项目文件和 web.config 以查看它们是否已被 NuGet 包修改。一个已知的问题子是postal 0.8.0。它将 RazorVersion 的 beta 版本作为依赖项引入(即使您已过滤为仅显示稳定版本)。即使您将 RazorVersion 更新到最新版本(该版本稳定),您的项目文件最终也会引用System.Web.Razor版本 1,并且您的 web.config 具有不正确的运行时程序集绑定。

要修复,请对您的项目文件和 web.config 与一个新的、空的 MVC 4 项目进行比较。然后从原始项目文件中复制正确的Reference元素。System.Web.Razor在 web.config 中,dependentAssembly删除System.Web.Razor.

这是您的项目文件的 TLDD(太懒了,没有区分)文本。希望到此代码段过时时,根本原因将得到修复。

<Reference Include="System.Web.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <Private>True</Private>
  <HintPath>..\packages\Microsoft.AspNet.Razor.2.0.20715.0\lib\net40\System.Web.Razor.dll</HintPath>
</Reference>

(不幸的是,您无法通过卸载并使用 NuGet 重新安装来解决此问题,因为您必须先卸载有问题的依赖包,例如 postal,当您重新安装它时会重新破坏。)

于 2013-02-27T03:53:58.080 回答
0

原来的..

  <dependentAssembly>
    <assemblyIdentity name="System.Web.WebPages.Deployment" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="2.0.0.0" />
  </dependentAssembly>

由于某种原因,newVersion 属性设置为 2.0.0.0 版本,而 dll 为 3.0.0.0

  <dependentAssembly>
    <assemblyIdentity name="System.Web.WebPages.Deployment" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
  </dependentAssembly>

比它有效

于 2014-12-15T21:38:16.770 回答
0

终于得到了这个排序,再次从nuget下载了razor2.0。似乎对 webconfig 进行了排序并修复了依赖错误。在 azure 上启动并运行并非没有任何问题。

于 2013-02-15T03:12:20.787 回答