我正在尝试在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文件的旧版本的内容,有什么建议吗?

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


当前回答

在我的案例中,上述解决方案都不起作用——问题是由app.config中定义的旧的.net配置(2.0)架构引起的,因为bindingRedirect不起作用。

删除xmlns=“http://schemas.microsoft.com/.NetConfiguration/v2.0“来自app.config或web.config,因为在较旧版本的.net framework(如2.0)中似乎不支持bindingRedirect

希望这能为某人节省几个小时或几天的时间。

其他回答

我在开始使用InstallShield后遇到了这个问题。尽管建造订单显示安装项目是最后一个,但它的建造仍不正常。

我纠正了这一点,使每个其他项目都依赖它-这迫使安装最后构建,从而消除了我的程序集不匹配。我希望这有帮助。

发生在我身上的System.ValueTuple

意外错误无法加载文件或程序集“System.ValueTuple,版本=4.0.1.0,文化=中性,PublicKeyToken=cc7b13ffcd2ddd51'或它的一个依赖项。系统找不到指定的文件。

通过在发生错误的计算机上安装.NET Framework 4.7.2 Runtime解决了此问题。简单且无需添加bindingRedirect、修改GAC或降级NuGet包等。

https://dotnet.microsoft.com/download/dotnet-framework/net472

在Team Foundation Server的生成服务上生成时遇到此错误。结果发现,我的解决方案中有多个项目,使用NuGet添加的同一库的不同版本。我删除了NuGet的所有旧版本,并添加了新版本作为所有版本的参考。

Team Foundation Server将所有DLL文件放在一个目录中,当然,一次只能有一个具有特定名称的DLL文件。

在我的单元测试项目中也出现了同样的错误,导致一些测试失败。我仔细检查了我在程序集资源管理器中使用的程序集的哪个版本,并检查了运行时/依赖程序集标记的内容,发现我使用的程序集中的另一个版本仍然在那里被引用。因为这是我的测试项目app.config中的唯一指令,所以我尝试删除整个app.config文件,重新构建解决方案,这就成功了!我没有更多参考错误:)

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

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

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

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