程序集清单定义与程序集引用不匹配。

20

我更新了MVC项目的所有软件包,结果出现以下错误:

无法加载文件或程序集'Antlr3.Runtime, Version=3.5.0.2, Culture=neutral, PublicKeyToken=eb42632606e9261f'或其依赖项之一。该程序集的清单定义与程序集引用不匹配。(HRESULT 异常: 0x80131040)

在打开一个Razor (.cshtml) 文件的情况下构建项目会出现更多错误。

5个回答

38

以下是我解决问题的方法:

进入解决方案资源管理器,选择引用下的Antlr,右键单击并选择属性。确保文件版本与编译器要求的版本相同。在我的情况下,MSBuild需要版本5.5.0.2,但引用属性显示为早期版本2.x。

我所需做的就是进入包管理器控制台,输入以下内容:

PM> update-package Antlr

然后再次构建项目,如果您对更多程序集出现相同的错误,请更新它们。您的问题将得到解决。


4
此外:如果上述方法不起作用,请尝试使用“Update-Package -Reinstall Antlr”。 - Leonardo Herrera

13

如果您的配置文件中有一个错误的绑定重定向,它指向您没有的版本,则可能会发生这种情况。

在我们的情况下,我们正在引用PostSharp 5.0.50 Nuget包,并且以下内容存在于我们的配置文件中,这导致它寻找PostSharp 5.0.51版本。

<dependentAssembly>
  <assemblyIdentity name="PostSharp" publicKeyToken="b13fd38b8f9c99d7" culture="neutral"/>
  <bindingRedirect oldVersion="0.0.0.0-5.0.51.0" newVersion="5.0.51.0"/>
</dependentAssembly>

我通过移除绑定重定向来解决了这个问题,因为它不是必需的。你也可以通过将绑定重定向的版本更改为你引用的Nuget包的相同版本来解决它。


3
因为这让我找到了正确的方向,所以点个赞。这很荒谬,但我们正在使用Newtonsoft.Json 10.0.2.0(不,我们现在不能升级),但在重定向中我们必须指定newVersion="10.0.0.0",因为内部上报的版本号是10.0.0.0。 - Andrew Steitz

4

我尝试了上述解决方案来更新特定包,但没有成功,但更新所有包确实有效。使用 package manager console

update-package -Reinstall

紧接着是解决方案的重建。


1
Update-Package -Reinstall Antlr

我已经尝试过...

另外,在发布时,请确保选中"删除现有文件"复选框。


1
我在我的MVC 5应用程序中遇到了同样的错误。尝试了从以下所有步骤:
  • 安装和重新安装Antlr包
  • 删除%TEMP%数据。

最终,我通过简单地从项目的bin文件夹中删除所有dll并重新构建项目来解决了问题。 虽然我仍然不确定这个引用错误的真正原因。


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