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

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


当前回答

我陷入了类似的问题。卸载解决方案文件并单击csproj中的编辑以搜索特定的dll,转到dll包文件夹的路径,发现有两个不同版本的dll具有相同的名称,因此删除了旧版本,现在已成功构建。

希望这对某人有所帮助。

其他回答

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

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

Get-Project -All | Add-BindingRedirect

在尝试了上面的许多解决方案但没有修复后,最终要确保在Visual Studio中的应用程序中启用了“自动生成绑定重定向”。

有关启用自动绑定重定向的更多信息,请参阅:https://learn.microsoft.com/en-us/dotnet/framework/configure-apps/how-to-enable-and-disable-automatic-binding-redirection

我也有类似的问题,但没有一个答案对我有效。

对我有效的解决方案是手动从项目文件(YourProject.csproj)中删除publicKeyToken部分。

以前是:

<Reference Include="Utility, Version=0.0.0.0, Culture=neutral, PublicKeyToken=e71b9933bfee3534, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>dlls\Utility.dll</HintPath>
</Reference>

更改后为:

<Reference Include="Utility, Version=1.0.1.100, Culture=neutral, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>dlls\Utility.dll</HintPath>
</Reference>

确保SpecificVersion为False。

在我的案例中,在运行ASP.NET应用程序时发生了此错误。解决方案是:

删除项目文件夹中的obj和bin文件夹

清理不起作用,重建不起作用。所有引用都很好,但它没有编写其中一个库。删除这些目录后,一切都很顺利。

我在运行单元测试用例时遇到了同样的问题。

错误清楚地说明了问题:当我们尝试加载程序集时,.NET程序集加载器会根据其清单数据(引用的程序集名称、公钥令牌、版本)加载其引用的程序。

要检查清单数据,请执行以下操作:

打开Visual Studio命令提示符,键入“ildasm”并将所需的程序集拖到ildasm窗口并打开MANIFEST视图。有时MANIFEST包含一个具有两个版本的程序集,即旧版本和新版本(如Utility,版本=1.2.0.200和Utility,版本=1.2.0203)。实际上,引用的程序集是Utility,版本为1.2.0.203(新版本),但由于清单甚至包含Utility,版本=1.2.0.200(旧版本),.NET程序集加载器尝试查找此版本的DLL文件,找不到,因此引发异常。

要解决这个问题,只需将每个依赖于项目的程序集分别拖到ILDASM窗口中,并检查哪个依赖程序集保存旧程序集版本的清单数据。只需重新生成此依赖程序集并将其引用回项目。