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

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


当前回答

.NET程序集加载器:

找不到1.2.0.203但确实找到了1.2.0.200

此程序集与请求的程序集不匹配,因此会出现此错误。

简单地说,它找不到被引用的程序集。通过将程序集放在GAC或应用程序路径中,确保它可以找到正确的程序集。

运行以下命令将程序集dll文件添加到GAC:

gacutil /i "path/to/my.dll"

另请参见https://learn.microsoft.com/archive/blogs/junfeng/the-located-assemblys-manifest-definition-with-name-xxx-dll-does-not-match-the-assembly-reference.

其他回答

以下命令将任何程序集版本重定向到3.1.0.0版本。我们有一个脚本,它将始终更新App.config中的此引用,因此我们再也不用处理此问题了。

通过反射,您可以获取程序集publicKeyToken,并从.dll文件本身生成此块。

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
 <dependentAssembly>
    <assemblyIdentity name="Castle.Core" publicKeyToken="407dd0808d44fbdc" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="3.1.0.0" />
  </dependentAssembly>
</assemblyBinding>

注意,如果没有XML命名空间属性(xmlns),这将无法工作。

对我来说,“Local.testtestings”文件中的代码覆盖率配置“导致”了问题。我忘了更新那里引用的文件。

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

在我的例子中,它是C:\WINDOWS\Microsoft.NET\Framework\~\Temporary ASP.NET Files\目录中的旧版本DLL。您可以删除或替换旧版本,也可以删除并添加回对项目中DLL的引用。基本上,任何一种方法都将创建指向临时ASP.NET文件的新指针。

我自己遇到了这个问题,我发现这个问题与其他人遇到的问题不同。

我的主项目引用了两个dll:CompanyClasses.dll和CompanyControls.dll

无法加载文件或程序集'CompanyClasses,版本=1.4.1.0,培养=中性,PublicKeyToken=045746ba8544160c'或它的一个依赖项。位于程序集的清单定义与程序集引用不匹配

问题是,我的系统中没有版本号为1.4.1的CompanyClasses.dll文件。GAC中没有,应用程序文件夹中没有。。。任何地方都没有。我搜索了整个硬盘。我所有的CompanyClasses.dll文件都是1.4.2。

我发现,真正的问题是CompanyControls.dll引用了CompanyClasses.dll的1.4.1版本。我刚刚重新编译了CompanyControl.dll(在引用CompanyClasss.dll 1.4.2之后),这个错误就消失了。