HRESULT:0x80131040:找到的程序集的清单定义与程序集引用不匹配
Posted
技术标签:
【中文标题】HRESULT:0x80131040:找到的程序集的清单定义与程序集引用不匹配【英文标题】:HRESULT: 0x80131040: The located assembly's manifest definition does not match the assembly reference 【发布时间】:2021-12-12 19:47:03 【问题描述】:找到的程序集的清单定义与程序集引用不匹配
在通过 ncover 运行 nunit 时得到这个。有什么想法吗?
【问题讨论】:
您可能需要重新构造标题和问题以吸引更多眼球。像“我正在尝试做 X 并且我收到此错误:error description ... 等等等等 没关系,我可以通过错误码找到这个问题。 一个旧线程,但一个常见问题。对我来说,原因是由于某种原因,我有 2 个运行相同解决方案的 Visual Studio 实例。另一个在任务栏上不可见,而仅在任务管理器上可见。关闭两者,然后进行清理和重建工作。 【参考方案1】:这是程序集之间的不匹配:从程序集引用的 DLL 没有预期的方法签名。
清理解决方案,重建所有内容,然后重试。
此外,如果这是对 GAC 中某些内容的引用,请务必小心;可能是某个地方指向了不正确的版本。确保(通过每个引用的属性)选择了正确的版本或将特定版本设置为 false。
【讨论】:
有没有办法强制编译器在编译时检查这种事情?我可以发誓这是 VS2005 中的默认设置。【参考方案2】:我最近遇到了这个问题,我在有问题的 dll 上运行了“depends.exe”。它向我展示了 dll 是在 x86 中编译的,而一些依赖项是在 x64 中编译的。
如果您仍然遇到问题,我建议您使用depends.exe。
【讨论】:
还有Depends.Net,netomatix.com/development/DependsNet.aspx我的问题很老套,module1想加载module2版本5.0.0.0,module2其实是5.0.8.3760。 Depends 没有标记这一点,而 Depends.Net 标记了。 到 DependNet 的链接断开,github.com/isindicic/DependencyWalker.Net/releases 我反编译了 exe 并检查了源代码,不狡猾,并且有一个不错的 UI。【参考方案3】:对于我的 wcf 休息服务项目,我必须在 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>
【讨论】:
【参考方案4】:删除所有运行时部分解决了我的问题
<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>
【讨论】:
这对我有用。自动映射器有问题。例外:无法加载文件或程序集“AutoMapper,Version=4.2.1.0,Culture=neutral,PublicKeyToken=be96cd2c38ef1005”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。 (HRESULT 异常:0x80131040)【参考方案5】:这通常发生在测试环境的其中一个 DLL 的版本与开发环境不匹配时。
清理和构建您的解决方案,并将您的所有 DLL 带到发生错误的环境中,应该修复它
【讨论】:
【参考方案6】:只需删除 bin 文件夹,然后项目会重新创建所有内容,它现在可以工作了。
【讨论】:
花了将近 2 个小时来解决这个问题。删除 bin 目录对我有用【参考方案7】:我在通过共享文件夹从不同计算机访问项目文件时遇到了类似的问题。就我而言, clean + reabuild 没有帮助。必须从输出目录中删除 bin 和 objects 文件夹。
【讨论】:
【参考方案8】:在我的情况下,我在调试时收到了这条消息:
"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 包管理器中更新组件更安全。所以两个组件具有相同的版本。
重建并解决了问题。
【讨论】:
【参考方案9】:在我的特殊情况下,我得到这个是因为在 VBScript 中完成了CreateObject
。
就我而言,原因是 GAC 中的程序集版本比我编译的版本旧。 (为了解决之前的问题,我在 GAC 中安装了程序集)。
因此,如果您正在使用 COM 可见类,请确保在向 RegASM 注册新程序集之前从 GAC 中删除旧版本的程序集。
【讨论】:
【参考方案10】:就我而言,这是因为 WebGrease 而发生的。我将它更新到最新版本(使用 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 中的版本。
【讨论】:
【参考方案11】:我在一个 web api 项目中遇到了这个问题。
Api 项目使用的是版本 3 的库的 nuget 包。其中一个引用的程序集说 X 使用的是版本 2 的同一 nuget 包的旧版本。
每当构建引用的程序集或重新构建引用 X 的任何其他项目时,api 项目的程序集都会更新为较低版本。并得到这个程序集引用错误。
重建工作,但就我而言,我想要一个长期的解决方案。
我让程序集引用了相同版本的 nuget 包。
【讨论】:
【参考方案12】:我遇到了找不到 PayPal 程序集的问题,这是因为我将解决方案命名为 PayPal。我相信这不会是任何人的答案,但我想我还是会分享它:C# ASP.NET MVC PayPal not finding assembly
【讨论】:
【参考方案13】:如果您在尝试向 Visual Studio 添加组件时遇到此错误,-Microsoft.VisualStudio.TemplateWizardInterface
-(尝试安装奇怪的开发工具后)
考虑这个解决方案(由 larocha 提供(谢谢,无论你是谁)):
-
在文本编辑器中打开 C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe.config
找到这个字符串:“
Microsoft.VisualStudio.TemplateWizardInterfac
e”
注释掉元素,使其看起来像这样:
<dependentAssembly>
<!-- assemblyIdentity name="Microsoft.VisualStudio.TemplateWizardInterface" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" / -->
<bindingRedirect oldVersion="0.0.0.0-8.9.9.9" newVersion="9.0.0.0" />
</dependentAssembly>
来源:http://webclientguidance.codeplex.com/workitem/15444
【讨论】:
【参考方案14】:这里只是另一个案例。在第一次将 XML 文件反序列化为 VS2010/.NET 4 下的对象时,我从 Managed Debugging Assistant 遇到了这个错误。包含对象类的 DLL 是在构建后事件中生成的(通常是 Microsoft 风格的东西)。在同一解决方案中的多个项目中工作得很好,在另一个项目中这样做时出现了问题。错误文字:
检测到 BindingFailure 消息:具有显示名称的程序集 MyProjectName.XmlSerializers 未能在“LoadFrom”绑定中加载 ID 为 1 的 AppDomain 的上下文。失败的原因是: System.IO.FileLoadException:无法加载文件或程序集 MyProjectName.XmlSerializers,版本=1.0.0.0,文化=中性, PublicKeyToken=null' 或其依赖项之一。位于 程序集的清单定义与程序集引用不匹配。 (HRESULT 异常:0x80131040)
由于此处的一些答案表明平台不匹配,我注意到 3 个项目和解决方案选择了“混合平台”配置,并且为 x86 而不是 AnyCPU 编译了 3 个项目。我没有特定于平台的代码(尽管一些供应商提供的 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 or Start Debugging Button is Greyed Out for Winform application?之后,我卸载并重新加载了启动项目(这也是最初出现问题的项目)。
之后,一切都恢复原状:程序正常运行,没有最初的错误。
请参阅 http://www.catb.org/jargon/html/R/rain-dance.html 、 http://www.catb.org/jargon/html/V/voodoo-programming.html 或 http://www.catb.org/jargon/html/I/incantation.html 以及那里的链接。
【讨论】:
【参考方案15】:我只是从项目中删除 settings.lic 文件并开始工作!
【讨论】:
【参考方案16】:当我更新 web.config 而不更新所有引用的 dll 时,这发生在我身上。
使用适当的差异过滤器(注意 Meld 的默认目录比较过滤器忽略二进制文件)发现差异,复制文件并且一切正常。
【讨论】:
【参考方案17】:只需检查您的 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>
【讨论】:
【参考方案18】:我在 Designer 中工作时遇到此错误。我一直在 VS 2012 中进行开发,但在过去几天里“升级”到了 2017 年。解决方案是关闭并重新打开 VS。
这可能与我看到的报告 elsewhere 的错误有关,其中参考管理器不起作用?在这种情况下,尝试在解决方案资源管理器中添加引用时会遇到以下错误消息:
"错误 HRESULT E_FAIL 已从对 COM 的调用中返回 组件。”
我的解决方法是关闭解决方案,在 VS2012 中重新打开,添加引用,关闭 2012 并重新打开 2017。可笑的是 2017 应该发布有如此明显的错误。
【讨论】:
【参考方案19】:我的 WPF 项目引用了 3 个自定义 dll。我更新了其中一个,删除了引用并添加了对新 dll 的引用。它还在参考的属性中显示了正确的版本号。它正在重建,没有错误。
但是当应用程序运行时,出现了“定位程序集的清单..”失败,提到了旧版本。
在搜索了几个小时的解决方案并阅读了几个这样的线程后,我想起了其他 dll。 其他 dll 之一是引用旧版本,这就是发生故障的原因。在我的 WPF 项目中重建第二个 dll 并重新创建两个引用后,失败就消失了。
别忘了检查你的其他 dll!
【讨论】:
【参考方案20】:我测试了上述所有解决方案,但对我来说都没有效果, 在考虑所有情况后发现问题出在其他地方,这太尴尬了。 我在不同文件夹中有同一个项目的两个不同分支,问题出在另一个分支。 我在两个分支上更新了 nuget 包(针对错误页面上提到的包),问题解决了!
【讨论】:
以上是关于HRESULT:0x80131040:找到的程序集的清单定义与程序集引用不匹配的主要内容,如果未能解决你的问题,请参考以下文章
未能加载文件或程序集“Newtonsoft.Json”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)
解决未能加载文件或程序集“Newtonsoft.Json ...."或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)(代码片段
无法加载文件或程序集“Newtonsoft.Json.Net”(HRESULT 异常:0x80131040)