单元测试项目找不到正在测试的组件(或依赖项)

时间:2011-11-03 10:38:51

标签: .net visual-studio visual-studio-2010 unit-testing compiler-errors

当我尝试运行我的单元测试项目时,出现以下错误:

  

无法加载文件或程序集“ASSEMBLY_NAME,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null”或其中一个依赖项。

     

系统找不到指定的文件。

被测组件位于同一解决方案中,每个项目都以.NET 4.0框架为目标。 它工作了一段时间,但今天我又遇到了这个错误。 我无法弄清楚出了什么问题,因为错误信息并没有告诉我什么。 (比如;无法找到WHICH文件..)

我尝试添加一个新的测试项目,但是在它给了我同样的错误信息之前,它已经工作了一段时间。

有没有人可以指出我正确的方向?

编辑:在诊断构建日志中,出现以下错误:

C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\TeamTest\
Microsoft.TeamTest.targets(14,5): 
error : Could not load file or assembly 'ASSEMBLY_NAME, Version=1.0.0.0, 
Culture=neutral, PublicKeyToken=null' or one of its dependencies. 
The system cannot find the file specified.

Done executing task "BuildShadowTask" -- FAILED. (TaskId:671)

Done building target "ResolveTestReferences" in 
      project "ASSEMBLY_NAME.Tests.vbproj" -- FAILED.: (TargetId:985)

10 个答案:

答案 0 :(得分:7)

在查看了一些其他搜索结果后,我在SA Private Accessor for method is not found处找到了这个问题。

删除* .accessor文件后,我的测试项目停止了抱怨并成功编译。

每个人都感谢他们的帮助!

答案 1 :(得分:6)

检查Build->Configuration Manager...菜单。所有项目都应该具有相同的平台和列Build

此外,您可以查看构建(Output窗口)的输出,它通常更清楚地说明找不到哪个文件。

答案 2 :(得分:3)

执行单元测试时有一个常见错误:执行文件夹。

您确定您的单元测试是否在正确的文件夹中运行?不在着名的 obj 文件夹中?

obj 文件夹中,仅复制生成的程序集,而不是依赖项 - 即复制本地true-。 因此,如果从此文件夹启动测试,则所有依赖项都将丢失。

答案 3 :(得分:3)

我尝试了以上所有方面都无济于事。最后,在csproj中我改变了

<Private>False</Private>

<Private>True</Private>

关于引用和所有传递的测试。

答案 4 :(得分:1)

请确保已选择“依赖关系”>“编辑引用”>“项目(您的项目)”,而不是项目的.net组装

答案 5 :(得分:0)

也许启用程序集加载日志记录可以为您提供有关无法加载程序集的原因的提示。

http://msdn.microsoft.com/en-us/library/e74a18c4.aspx

答案 6 :(得分:0)

我遇到了同样的问题,发现将dll复制到GAC解决了这个问题。虽然我仍然不明白为什么它不使用引用的项目程序集。

答案 7 :(得分:0)

另一个可能的原因是单元测试项目的程序集名称与正在测试的程序集使用相同的名称。 (即确保您的单元测试组件名称是唯一的。)

答案 8 :(得分:0)

我遇到此错误,并通过 更新NUTCH软件包 对其进行了修复。

之所以可行,是因为我在解决方案中的一个项目引用的是该解决方案中包含的另一个项目的旧版本。

当我在Visual Studio中使用“全部运行”测试时,我想它会复制项目的“当前”输出,然后再复制nuget包依赖项dll,如果它们具有相同的名称,则会覆盖原始文件。 (在那里总猜测)

当我检查错误消息时,我可以看到我的项目正在引用某个依赖项的“ 0.0.10版”,但是我的解决方案一直将该项目包含到“ 0.0.30版”中,因此差异很大。

答案 9 :(得分:-1)

参考资料 - &gt;标记dll-&gt;右键点击&gt;属性 - &gt;将本地设置复制为真