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

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


当前回答

如果尝试使用反射进行后期绑定,如果绑定到的程序集具有强名称或其公钥标记已更改,则会引发完全相同的错误。即使实际上没有使用指定的公钥令牌找到任何程序集,错误也是一样的。

您需要添加正确的公钥令牌(可以使用dll上的sn-T获取它)以解决错误。希望这有帮助。

其他回答

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

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

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

检查project的财产中的licenses.licx,您将在那里发现错误的版本。。。。它在活跃的报告引用中对我有用

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

从文件夹位置手动删除旧程序集,然后将引用添加到新程序集可能会有所帮助。

我只是找到了另一个原因,为什么会出现这个错误。我从特定库的所有版本中清理了我的GAC,并参照与可执行文件一起部署的特定版本构建了我的项目。当我运行这个项目时,我在搜索库的更新版本时遇到了这个异常。

原因是发布者策略。当我从GAC卸载库的版本时,我忘了卸载发布者策略程序集,所以程序集加载器在GAC中找到发布者策略,告诉它搜索新版本,而不是使用本地部署的程序集。