问题 单元测试项目找不到被测试的组件(或依赖项)


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

无法加载文件或程序集“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)

2940
2017-11-03 10:38


起源



答案:


在查看了一些额外的搜索结果后,我在SA找到了这个问题 找不到方法的私人访问者 。

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

大家都感谢他们的帮助!


7
2017-11-04 07:40



真的很有效......很棒> _ < - Anthony
我注意到这是错误的解决方案。但是现在我依赖该访问器的所有测试都不再编译。 - Joel McBeth


答案:


在查看了一些额外的搜索结果后,我在SA找到了这个问题 找不到方法的私人访问者 。

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

大家都感谢他们的帮助!


7
2017-11-04 07:40



真的很有效......很棒> _ < - Anthony
我注意到这是错误的解决方案。但是现在我依赖该访问器的所有测试都不再编译。 - Joel McBeth


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

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


4
2017-11-03 10:47



感谢您的评论。解决方案中的每个项目都设置为debug / anyCpu。乍一看,输出窗口没有提供任何更多细节。我会再检查一下 - Rhapsody
在 工具>选项>项目和解决方案>构建和运行,你可以设置 MSBuild项目构建输出详细程度 至 详细 要么 诊断 检查一下 ResolveAssemblyReferences 目标说。 - JoeBilly
不幸的是,诊断日志并没有告诉我一些新的东西。没有任何进一步(有用)细节的完全相同的错误消息。 - Rhapsody
@Rhapsody,我试图重现这个问题,以防万一 assembly or dependency was not found 我在输出窗口中有以下内容: error CS0006: Metadata file '{FULL_ASSEMBLY_PATH}' could not be found。请确定 show output from : Build 被选中。 - Snowbear
@Snowbear不幸的是,关键字“CS0006”,“元数据”和“无法找到”没有出现在输出日志中(选择了Build)。非常感谢你试图重现这个问题!) - Rhapsody


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

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

在里面 OBJ 夹, 仅复制生成的程序集,而不是依赖 - 甚至复制本地真 - 。 因此,如果从此文件夹启动测试,则所有依赖项都将丢失。


3
2017-11-03 11:12



感谢您的评论,但我确定我正在使用调试文件夹。编译解决方案时我已经遇到了异常。 - Rhapsody
这可能是我的问题,但如何编辑“测试运行/启动文件夹”? - FizxMike
在大多数情况下,测试运行器(MSTest,NUnit ...)处理文件夹中的单元测试。检查日志中的测试运行器命令行。一个常见的错误是有一个未定义的测试文件夹,它意味着运行解决方案及其子目录中的所有测试。 MSTest的Ex: msdn.microsoft.com/en-us/library/ms182489.aspx。定义测试文件夹是另一个问题,它取决于运行测试的产品和执行上下文。 - JoeBilly


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

<Private>False</Private>

<Private>True</Private>

在参考和所有测试通过。


3
2018-02-09 15:15



为我工作! - Anders


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

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


0
2017-11-03 11:14



“装配绑定日志查看器”显示为空屏幕并禁用“查看日志”按钮。 - Rhapsody
你启用了程序集加载日志吗?它默认禁用 - Vagaus
第二次启动(并开启日志记录)后,我能够看到一些日志记录。我还没有找到任何有用的东西,但我一直在寻找。 - Rhapsody


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


0
2017-08-15 12:52





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


0
2018-01-29 15:13





参考 - >标记dll->右键单击 - >属性 - >复制本地设置为true


-1
2018-02-19 15:08