我正在尝试在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文件的旧版本的内容的任何建议?”

需要哪个程序集仍然引用旧的ODATA客户端6.15.0,ildasm帮助我缩小了范围(没有基本代码访问,只能通过服务器上部署的pkg)。

下面的屏幕截图用于快速总结。

DeveloperPackge(如果没有ildasm.exe)https://www.microsoft.com/net/download/visual-studio-sdks

其他回答

在Team Foundation Server的生成服务上生成时遇到此错误。结果发现,我的解决方案中有多个项目,使用NuGet添加的同一库的不同版本。我删除了NuGet的所有旧版本,并添加了新版本作为所有版本的参考。

Team Foundation Server将所有DLL文件放在一个目录中,当然,一次只能有一个具有特定名称的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.

与“文件资源管理器”>“属性”>“详细信息”选项卡中的版本相比,.DLL在代码中使用反射的“版本”属性报告不同的版本并不罕见。

多年来,我发现使用这种powershell可以更好地找到应该将绑定重定向设置到哪个版本。

[Reflection.AssemblyName]::GetAssemblyName('C:\Source\Project\Web\bin\System.Memory.dll').Version

Major  Minor  Build  Revision
-----  -----  -----  --------
4      0      1      2

通过以上步骤,我可以在app.config文件中插入(或替换)绑定重定向:

<dependentAssembly>
    <assemblyIdentity name="System.Memory" culture="neutral" publicKeyToken="cc7b13ffcd2ddd51"/>
    <bindingRedirect oldVersion="0.0.0.0-4.0.1.2" newVersion="4.0.1.2"/>
</dependentAssembly>

在该特定示例中,System.Memory.dll的“详细信息”选项卡报告的文件版本为4.6.31308.01。

我得到了:

无法加载文件或程序集“XXX new”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(HRESULT的异常:0x80131040)

这是因为我将程序集的名称从XXX.dll更改为XXX-new.dll。将名称还原为原始名称修复了错误。

我刚刚遇到了这个问题,问题是我的应用程序调试目录中有一个旧的.dll副本。您可能还想在那里(而不是GAC)查看是否看到它。