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

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


当前回答

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

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

其他回答

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

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

我也犯了同样的错误。。。在我的案例中,问题解决如下:

最初安装应用程序时,这里的人在应用程序中使用了Microsoft Enterprise Library 4.1。在前一周,我的机器被格式化了,在那之后,今天当我构建应用程序时,它给了我一个错误,即缺少企业库程序集。然后我安装了Microsoft Enterprise Library 5.0,这是我在谷歌上作为第一个搜索条目获得的。然后当我构建应用程序时,它给了我上面的错误,即找到的程序集的清单定义与程序集引用不匹配。经过大量的搜索和分析,我发现应用程序引用的是4.1.0.0,bin文件夹中的DLL版本是5.0.0.0然后我安装了Microsoft Enterprise Library 4.1。删除先前的引用(5.0)并添加4.0引用。构建应用程序(&V)。。。它奏效了。

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

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

您可能在assemblyBinding中有错误的掘金版本,请尝试:

删除web.config/app.config中的所有程序集绑定内容:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="Microsoft.Extensions.Logging.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.1.3.0" newVersion="3.1.3.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="Microsoft.Extensions.DependencyInjection" publicKeyToken="adb9793829ddae60" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.1.3.0" newVersion="3.1.3.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.ComponentModel.Annotations" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.2.1.0" newVersion="4.2.1.0" />
  </dependentAssembly>
</assemblyBinding>

在包管理器控制台中键入:添加BindingRedirect生成所有必要的绑定重定向运行应用程序,看看它是否正常工作。如果没有,请添加包控制台缺少的任何缺少的绑定重定向。

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

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