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

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


当前回答

我的问题是将源代码复制到一台新机器上,而不覆盖任何引用的程序集。

我没有采取任何措施来纠正错误,所以匆忙中,我删除了BIN目录。重新构建了我的源代码,从那时起就开始工作了。

其他回答

请在Visual Studio调试器中运行代码。请运行直到得到异常。将出现Visual Studio异常UI。请阅读Visual Studio异常底部的“完整详细信息”/“显示详细信息”。在Fulldetails/Showdetails中,它告诉我我的一个项目(指我的主项目)有一个不同的版本在我的例子中,我的单元测试项目正在调用我的项目。我的单元测试项目和我的项目具有不同版本的Microsoft.IdentityModel.Clients.ActiveDirectory。我在执行单元测试时遇到运行时错误。

我刚刚用主项目的相同版本更新了单元测试项目的版本。这对我有用。

由于引用了与我正在生成的程序集同名的程序集,我收到了此错误消息。

这已编译,但它用当前项目程序集覆盖引用的程序集,从而导致错误。

为了解决这个问题,我更改了项目的名称,并通过右键单击项目并选择“财产”来更改可用的程序集财产。

我现在要让所有人都大吃一惊。

从.config文件中删除所有<assemblyBinding>引用,然后从NuGet Package Manager控制台运行以下命令:

Get-Project -All | Add-BindingRedirect

我在使用内部包存储库时遇到了这个问题。我已经将主包添加到内部存储库中,但没有添加包的依赖项。确保将所有依赖项、依赖项的依赖项、递归等也添加到内部存储库中。

问题已经有了答案,但如果同一解决方案中不同版本的NuGet包出现了问题,您可以尝试以下方法。

打开NuGet Package Manager,您会看到我的服务项目版本与其他版本不同。

然后更新包含包的旧版本的项目。