我正在尝试在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在代码中使用反射的“版本”属性报告不同的版本并不罕见。

多年来,我发现使用这种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。

其他回答

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

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

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

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

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

我也有同样的错误,但在我的案例中,我在本地运行一个自定义的nuget包到另一个项目中。

为我修复的是将包版本更改为错误中请求的版本。

该包在netstandard 2.1中,请求该包的项目在netcore 3.1中

请在Visual Studio调试器中运行代码。请运行直到得到异常。将出现Visual Studio异常UI。请阅读Visual Studio异常底部的“完整详细信息”/“显示详细信息”。在Fulldetails/Showdetails中,它告诉我我的一个项目(指我的主项目)有一个不同的版本在我的例子中,我的单元测试项目正在调用我的项目。我的单元测试项目和我的项目具有不同版本的Microsoft.IdentityModel.Clients.ActiveDirectory。我在执行单元测试时遇到运行时错误。

我刚刚用主项目的相同版本更新了单元测试项目的版本。这对我有用。