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

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


当前回答

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

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

其他回答

尝试将缺少的内容添加到全局程序集缓存中。

运行迁移器以从使用packages.config升级到PackageReference,为我轻松修复了此错误。如果您运行的是Visual Studio 2017 15.7版或更高版本,您可以按照以下步骤进行升级。

https://learn.microsoft.com/en-us/nuget/consume-packages/migrate-packages-config-to-package-reference#migration-步骤

以下是步骤(从上述链接复制):

使用packages.config打开包含项目的解决方案。在解决方案资源管理器中,右键单击“引用”节点或packages.config文件,然后选择将packages.cnfig迁移到程序包参考。。。。迁移器分析项目的NuGet包引用和尝试将它们分类为顶级依赖项(NuGet直接安装的软件包)和Transitive依赖项(作为顶级包的依赖项安装的包)。注意:PackageReference支持可传递的包还原和解析依赖关系是动态的,这意味着传递依赖关系需要不能显式安装。(可选)您可以选择将NuGet包分类为通过选择程序包的顶层选项。此选项自动设置为包含不流动的资产的包(build、buildCrossTargeting、contentFiles或分析器文件夹)和标记为开发依赖项(developmentDependency=“真”)。检查所有程序包兼容性问题。选择“确定”开始迁移。在迁移结束时,Visual Studio提供了一个带有备份路径、已安装软件包的列表(顶级依赖项),引用为可传递的包列表依赖关系,以及在开始迁移。报告将保存到备份文件夹中。验证解决方案是否构建并运行。如果您遇到问题,在GitHub上提交问题。

对我们来说,问题是由其他原因造成的。DevExpress组件的许可证文件包含两行,一行用于未安装在此特定计算机上的旧版本组件。从许可证文件中删除旧版本解决了问题。

令人讨厌的是,错误消息没有指出是什么引用导致了问题。

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

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

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

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

希望这对某人有所帮助。