协慌网

登录 贡献 社区

找到的程序集的清单定义与程序集引用不匹配

我试图在 C#Windows 窗体应用程序(Visual Studio 2005)中运行一些单元测试,但出现以下错误:

System.IO.FileLoadException:无法加载文件或程序集 “实用程序,版本 = 1.2.0.200,区域性 = 中性,PublicKeyToken = 764d581291d764f7” 或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。 (来自 HRESULT 的异常:0x80131040)**

在 x.Foo.FooGO()

在 Foo.cs:第 123 行的 x.Foo.Foo2(String groupName_)

在 FooTests.cs 中的 x.Foo.UnitTests.FooTests.TestFoo():行 98 **

System.IO.FileLoadException:无法加载文件或程序集 “实用程序,版本 = 1.2.0.203,区域性 = 中性,PublicKeyToken = 764d581291d764f7” 或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。 (来自 HRESULT 的异常:0x80131040)

我查看了我的参考文献,并且仅参考了Utility version 1.2.0.203 (另一个是旧的)。

关于如何找出试图引用此 DLL 文件旧版本的任何建议?

此外,我认为我的硬盘上甚至没有这个旧程序集。有什么工具可以搜索这个旧版本的程序集吗?

答案

.NET 程序集加载器:

  • 找不到 1.2.0.203
  • 但确实找到了 1.2.0.200

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

简而言之,它找不到所引用的程序集。通过将其放入 GAC 或应用程序路径中,确保可以找到正确的程序集。另请参阅http://blogs.msdn.com/junfeng/archive/2004/03/25/95826.aspx

您可以做几件事来解决此问题。首先,使用 Windows 文件搜索在硬盘驱动器中搜索程序集(.dll)。获得结果列表后,请执行 View-> Choose Details ...,然后检查 “File Version”。这将在结果列表中显示版本号,因此您可以看到旧版本可能来自何处。

另外,就像 Lars 所说的那样,检查您的 GAC 以查看那里列出了什么版本。 Microsoft 的这篇文章指出,在构建过程中不会在本地复制在 GAC 中找到的程序集,因此您可能需要先删除旧版本,然后再进行全部重建。 (有关创建批处理文件的注释,请参阅我对此问题的回答)

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

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

我的主项目引用了两个 DLL:CompanyClasses.dll 和 CompanyControls.dll。我收到运行时错误消息:

无法加载文件或程序集'CompanyClasses,Version = 1.4.1.0,Culture = neutral,PublicKeyToken = 045746ba8544160c' 或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配

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

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