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

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


当前回答

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

其他回答

没有适合我的解决方案。我尝试了清理项目解决方案、删除bin、更新包、降级包等……两个小时后,我用程序集从项目加载了默认App.config,并在那里更改了错误的引用版本:

<dependentAssembly>
    <assemblyIdentity name="Microsoft.IdentityModel.Logging" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.5.0.0" newVersion="5.5.0.0" />
</dependentAssembly>

to:

<dependentAssembly>
    <assemblyIdentity name="Microsoft.IdentityModel.Logging" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.14.0.0" newVersion="5.5.0.0" />
</dependentAssembly>

在这之后,我清理了这个项目,再次构建它,它成功了。没有警告没有问题。

如果将AssemblyInfo.cs与AssemblyVersion标记一起使用,并且.csproj文件具有不同的值,也可能发生这种情况。通过匹配AssemblyInfo或一起删除该部分,问题就消失了。

我一时被这个难住了。我可以在发布版中构建和运行,但由于引用与清单不匹配而无法在调试中运行。我一定检查了100次引用,并删除了所有dll。我注意到在调试和发布中生成的清单是不同的。

我删除了我的项目/财产中的app.manifest,它解决了这个问题。这并没有提到有问题的引用dll,所以我不知道为什么这会导致问题。

在尝试了上面的许多解决方案但没有修复后,最终要确保在Visual Studio中的应用程序中启用了“自动生成绑定重定向”。

有关启用自动绑定重定向的更多信息,请参阅:https://learn.microsoft.com/en-us/dotnet/framework/configure-apps/how-to-enable-and-disable-automatic-binding-redirection

由于引用了与我正在生成的程序集同名的程序集,我收到了此错误消息。

这已编译,但它用当前项目程序集覆盖引用的程序集,从而导致错误。

为了解决这个问题,我更改了项目的名称,并通过右键单击项目并选择“财产”来更改可用的程序集财产。