我正在尝试在C#Windows窗体应用程序(Visual Studio 2005)中运行一些单元测试,但出现以下错误:

System.IO.FileLoadException:未能加载文件或程序集“Utility,Version=1.2.0.200,Culture=neutral,PublicKeyToken=764d581291d764f7”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(HRESULT的异常:0x80131040)**位于x.Foo.FooGO()位于Foo.cs:line 123中的x.Foo.Foo2(String groupName_)位于FooTests.cs:line 98中的x.Foo.UnitTests.FooTests.TestFoo()**System.IO.FileLoadException:未能加载文件或程序集“Utility,Version=1.2.0.203,Culture=neutral,PublicKeyToken=764d581291d764f7”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(HRESULT的异常:0x80131040)

我查阅了我的参考资料,我只参考了实用程序版本1.2.0.203(另一个是旧版本)。

关于我如何找出试图引用此DLL文件的旧版本的内容,有什么建议吗?

此外,我想我的硬盘上甚至没有这个旧组件。是否有任何工具可以搜索此旧版本的程序集?


当前回答

右键单击VS中的引用,将“特定版本”属性设置为True。

其他回答

我得到了:

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

这是因为我将程序集的名称从XXX.dll更改为XXX-new.dll。将名称还原为原始名称修复了错误。

在这篇文章中提到过类似的问题吗?“关于我如何找出试图引用此DLL文件的旧版本的内容的任何建议?”

需要哪个程序集仍然引用旧的ODATA客户端6.15.0,ildasm帮助我缩小了范围(没有基本代码访问,只能通过服务器上部署的pkg)。

下面的屏幕截图用于快速总结。

DeveloperPackge(如果没有ildasm.exe)https://www.microsoft.com/net/download/visual-studio-sdks

如果您遇到类似“找到的程序集的清单定义与程序集引用不匹配”的错误,并且您已经通过VS中的“项目”>“管理NuGet程序包和更新”选项卡进行了更新,那么您可以做的第一件事就是在从NuGet Gallery页面检查版本并从package Manager控制台运行以下命令后,尝试安装另一个版本的程序包:

PM> Install-Package YourPackageName -Version YourVersionNumber 
//Example
PM> Install-Package Microsoft.Extensions.FileProviders.Physical -Version 2.1.0

虽然答案和所讨论的包并没有直接关系,而且早在很久以前就有人问过它,但它是一种通用的,仍然相关,希望它能帮助一些人。

您可以做一些事情来解决此问题。首先,使用Windows文件搜索在硬盘上搜索程序集(.dll)。一旦有了结果列表,请执行查看->选择详细信息。。。然后选中“文件版本”。这将在结果列表中显示版本号,因此您可以看到旧版本可能来自何处。

此外,正如Lars所说,检查您的GAC,看看那里列出了什么版本。这篇Microsoft文章指出,在生成过程中,在GAC中找到的程序集不会在本地复制,因此您可能需要在全部重新生成之前删除旧版本。(有关创建批处理文件以执行此操作的说明,请参见我对此问题的回答)

如果仍然无法确定旧版本的来源,可以使用Visual Studio附带的fuslogvw.exe应用程序获取有关绑定失败的详细信息。Microsoft在此处提供了有关此工具的信息。请注意,您必须通过将HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\EnableLog注册表项设置为1来启用日志记录。

我也犯了同样的错误。。。在我的案例中,问题解决如下:

最初安装应用程序时,这里的人在应用程序中使用了Microsoft Enterprise Library 4.1。在前一周,我的机器被格式化了,在那之后,今天当我构建应用程序时,它给了我一个错误,即缺少企业库程序集。然后我安装了Microsoft Enterprise Library 5.0,这是我在谷歌上作为第一个搜索条目获得的。然后当我构建应用程序时,它给了我上面的错误,即找到的程序集的清单定义与程序集引用不匹配。经过大量的搜索和分析,我发现应用程序引用的是4.1.0.0,bin文件夹中的DLL版本是5.0.0.0然后我安装了Microsoft Enterprise Library 4.1。删除先前的引用(5.0)并添加4.0引用。构建应用程序(&V)。。。它奏效了。