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

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


当前回答

尝试从webConfig/appConfig中删除程序集引用

 <dependentAssembly>
        <assemblyIdentity name="System.IO" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.3.0.0" />
      </dependentAssembly>

其他回答

如果您正在使用Visual Studio,请尝试“清理解决方案”,然后重新生成项目。

我今天遇到了同样的问题,在我对实体框架进行了更改后,我无法执行添加迁移。

我的解决方案中有两个项目,我们称它们为“客户端”和“数据”,这是一个包含我的EF模型和上下文的类库项目。客户参考了数据项目。

我已经签署了两个项目,然后对EF模型进行了修改。删除签名后,我可以添加迁移,然后可以重新签署项目。

我希望这对某人有用,避免他们长期受挫。。

发生在我身上的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

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

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

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

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