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

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


当前回答

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

其他回答

在AssemblyInfo.cs文件中的AssemblyVersion中,使用固定版本号,而不是指定*。*将更改每次编译的版本号。这就是我这个例外的问题所在。

我只是找到了另一个原因,为什么会出现这个错误。我从特定库的所有版本中清理了我的GAC,并参照与可执行文件一起部署的特定版本构建了我的项目。当我运行这个项目时,我在搜索库的更新版本时遇到了这个异常。

原因是发布者策略。当我从GAC卸载库的版本时,我忘了卸载发布者策略程序集,所以程序集加载器在GAC中找到发布者策略,告诉它搜索新版本,而不是使用本地部署的程序集。

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

我的主项目引用了两个dll:CompanyClasses.dll和CompanyControls.dll

无法加载文件或程序集'CompanyClasses,版本=1.4.1.0,培养=中性,PublicKeyToken=045746ba8544160c'或它的一个依赖项。位于程序集的清单定义与程序集引用不匹配

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

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

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

Team Foundation Server将所有DLL文件放在一个目录中,当然,一次只能有一个具有特定名称的DLL文件。

在我的单元测试项目中也出现了同样的错误,导致一些测试失败。我仔细检查了我在程序集资源管理器中使用的程序集的哪个版本,并检查了运行时/依赖程序集标记的内容,发现我使用的程序集中的另一个版本仍然在那里被引用。因为这是我的测试项目app.config中的唯一指令,所以我尝试删除整个app.config文件,重新构建解决方案,这就成功了!我没有更多参考错误:)