结果: 0x80131040: 找到的程序集的清单定义与程序集引用不匹配

找到的程序集的清单定义与程序集引用不匹配

查 NUnit 的时候发现的,知道是什么吗?

268068 次浏览

这是程序集之间的不匹配: 从程序集引用的 DLL 没有预期的方法签名。

清理解决方案,重建所有内容,然后再试一次。

另外,如果这是对 GAC 中的某些内容的引用,则要小心; 它可能是某个地方的某个内容指向了不正确的版本。确保(通过每个引用的属性)选择了正确的版本或者特定版本设置为 false。

我最近遇到了这个问题,并且在有问题的 dll 上运行了‘ depes.exe’。它向我展示了 dll 是在 x86中编译的,而一些依赖项是在 x64中编译的。

如果您仍然有问题,我建议您使用 depes.exe。

在我的特殊情况下,我得到了这个结果作为一个 CreateObject在 VBScript 中完成。 在我的例子中,原因是驻留在 GAC 中的程序集的一个版本,该版本比我编译的版本更早。(为了解决早期的问题,我在 GAC 中安装了这个程序集)。

因此,如果使用的是 COM 可见类,那么在向 RegASM 注册新程序集之前,一定要从 GAC 中删除程序集的旧版本。

如果在向 VisualStudio 添加组件时出现此错误,-Microsoft.VisualStudio.TemplateWizardInterface-(在尝试安装奇怪的开发工具之后)

考虑一下这个解决方案(承蒙 Larocha (谢谢,不管你是谁)) :

  1. 在文本编辑器中打开 C: Program Files Microsoft Visual Studio 9.0 Common7 IDE devenv.exe.config
  2. 找到这个字符串: “ Microsoft.VisualStudio.TemplateWizardInterface”
  3. 注释掉元素,使它看起来像这样:

< 附属装配 >
集成身份名称 = “ Microsoft. VisualStudio. TemplateWizardInterface”publicKeyToken = “ b03f5f7f11d50a3a”Culture = “释放”/—— >
< bindingRedirect oldVersion = “0.0.0.0-8.9.9.9”newVersion = “9.0.0.0”/>

来源: http://webclientguidance.codeplex.com/workitem/15444

这通常发生在测试环境的一个 DLL 的版本与开发环境不匹配时。

清理并生成解决方案,并将所有 DLL 带到发生错误的环境中,以便修复该错误

在我的 wcf rest 服务项目中,我必须在 web.config 中添加一个运行时段,其中包含请求的 dll:

  <runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246" />
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
</dependentAssembly>
.
.
.
<runtime>

我在通过共享文件夹从不同的计算机访问项目文件时遇到了类似的问题。在我的情况下,清洁 + 重建没有帮助。必须从输出目录中删除 bin 和 Objects 文件夹。

在我的情况下,它发生是因为网络油脂。我将它更新到最新版本(使用 NuGet) ,但它与依赖关系有冲突。我在 web.config 中手动添加了以下代码,它非常有用。

<dependentAssembly>
<assemblyIdentity name="WebGrease" culture="neutral" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-1.6.5135.21930" newVersion="1.6.5135.21930" />
</dependentAssembly>

请注意,我的解决方案只有在错误与 WebGrease 相关时才能正常工作。错误代码将保持不变。此外,还需要相应地更改 oldVersion 和 newVersion 中的版本。

我在一个 web api 项目中遇到了这个问题。

Api 项目使用了版本3的库的一个 nuget 包。其中一个引用的程序集说,X 使用的是同一个 nuget 包的旧版本和版本2。

每当生成引用的程序集或重新生成任何其他引用 X 的项目时,api 项目的程序集都会以较低的版本进行更新。得到了这个装配参考错误。

重建工程,但在我的情况下,我想要一个长期的解决方案。

我让程序集引用了相同版本的 Nuget 软件包。

又一个案子。在第一次将 XML 文件反序列化为 VS2010/下的对象时,ManagedDebug Assistant 出现了这个错误。NET 4.包含对象类的 DLL 是在构建后事件(通常是 Microsoft 风格的东西)中生成的。对于同一个解决方案中的几个项目来说,工作得非常好,当在另一个项目中这样做时,问题出现了。错误文本:

检测到 Bindingfalse Message: 具有显示名称的程序集 在“ LoadFrom”绑定中加载 MyProjectName.XmlSerializer”失败 失败的原因是: FileLoadException: 无法加载文件或程序集 版本 = 1.0.0.0,文化 = 中性, PublicKeyToken = null’或它的一个依赖项 程序集的清单定义与程序集引用不匹配。 (来自 HRESULT T: 0x80131040的异常)

由于这里的一些答案表明平台不匹配,我注意到有3个项目和解决方案选择了“混合平台”配置,并且有3个项目是为 x86而不是 AnyCPU 编译的。我没有特定于平台的代码(尽管一些供应商提供的 DLL 依赖于一些 x86库)。我将 x86的所有匹配项替换为 AnyCPU:

for a in $( egrep '(x86|AnyCPU)' */*.csproj *.sln -l  ) ; do echo $a ; sed -i 's/x86/AnyCPU/' $a ; done

然后项目将构建,但所有运行或调试代码的选项都将变成灰色。重新启动 VS 不会有任何帮助。

我用 git 还原了对 x86-库的引用,以防万一,但是在编译的所有代码中都保留了 AnyCPU。

F5或开始调试按钮是灰色的 Winformation 应用程序?之后,我卸载并重新加载了开始的项目(这也是最初出现问题的地方)。

之后,一切恢复正常: 程序在没有初始错误的情况下工作。

参见 http://www.catb.org/jargon/html/R/rain-dance.htmlhttp://www.catb.org/jargon/html/V/voodoo-programming.htmlhttp://www.catb.org/jargon/html/I/incantation.html和链接。

通过删除所有运行时部件解决了我的问题

<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>

我有一个问题,它不会找到贝宝组装,这是因为我已经命名了我的解决方案贝宝。我敢肯定这不会是任何人的答案,但认为我会分享它无论如何: C # ASP.NET MVC PayPal 找不到汇编

我只是从项目中删除 setings.lic 文件并开始工作!

在我的例子中,我是在调试时得到这条消息的:

"Error while calling service <ServiceName> Could not load file or assembly 'RestSharp,
Version=105.2.3.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies.
The located assembly's manifest definition does not match the assembly reference.
(Exception from HRESULT: 0x80131040)"

因为

在我的项目中,我有2个使用 RestSharp 的内部组件,但是两个组件都有不同版本的 RestSharp (一个版本是 105.2.3.0,另一个版本是 106.2.1.0)。

解决方案

要么将其中一个组件升级为更新的,要么将另一个组件降级。对我来说,从 106.2.1.0降级到 105.2.3.0比在 NuGet 包管理器中更新组件更安全。所以两个组件有相同的版本。

重建后,问题都解决了。

当我更新 web.config 时,没有更新所有引用的 dls,就发生了这种情况。

使用适当的 diff 过滤器(小心 Meld 的默认目录比较过滤器忽略二进制文件) ,差异被识别,文件被复制,一切工作正常。

检查你的 webconfig 文件并删除这段代码:-

<dependentAssembly>
<assemblyIdentity name="itextsharp" publicKeyToken="8354ae6d2174ddca" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.5.13.0" newVersion="5.5.13.0" />
</dependentAssembly>

只要删除 bin 文件夹,然后项目重新创建所有现在将工作。

我在设计器中工作时出现了这个错误。我一直在开发 VS 2012,但在过去几天“升级”到了2017。解决方案是关闭和重新打开 VS。

它可能与一个错误,我已经看到报告 其他地方,其中参考管理器不工作?在这种情况下,试图在解决方案资源管理器中添加引用时会遇到以下错误消息:

”调用 COM 时返回了错误 HResult T E _ FAIL 组件。」

我的解决办法是关闭解决方案,在 VS2012中重新打开,添加引用,关闭2012并在2017年重新打开。可笑的是2017年竟然发布了如此明显的漏洞。

我的 WPF 项目引用了3个自定义 dlls。我更新了其中的一个,删除了引用,并将引用添加到新的 dll。它还在引用的属性中显示了正确的版本号。这是毫无差错的重建。

但是当应用程序运行时,出现了“定位程序集的清单”故障,提到了旧版本。

在搜索了几个小时的解决方案并阅读了这样的几个线程之后,我想起了其他的 dll。 另一个 dll 引用的是旧版本,这就是为什么会发生故障。在我的 WPF 项目中重新构建第2个 dll 并重新创建两个引用之后,失败就消失了。

别忘了检查你的其他 DLL!

我测试了以上所有的解决方案,但都不适合我, 经过深思熟虑,所有的情况都发现问题出在别的地方,这真是太尴尬了。
我有两个不同的分支为同一个项目在不同的文件夹,问题是从另一个分支。
我更新了两个分支上的 Nuget 包(错误页面上提到的包) ,问题解决了!

对我来说,问题是在应用程序文件版本,它是3.3.1和我正在建立一个新的为20.0.1,当重置版本回到相同的价值,它工作得很好。