【问题标题】:Unit test project cannot find assembly under test (or dependencies)单元测试项目找不到被测程序集(或依赖项)
【发布时间】:2011-12-21 01:31:40
【问题描述】:

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

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

系统找不到指定的文件。

被测程序集位于同一解决方案中,并且每个项目都针对 .NET 4.0 框架。 它工作了一段时间,但今天我再次收到此错误。 我无法弄清楚出了什么问题,因为错误消息并没有告诉我足够的信息。 (比如;找不到哪个文件..)

我尝试添加一个新的测试项目,但该项目工作了一段时间后才给我同样的错误消息。

有谁能给我指出正确的方向吗?

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

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)

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的评论。解决方案中的每个项目都设置为 debug/anyCpu。乍一看,“输出”窗口没有提供更多细节。我会再检查一遍
    • Tools > Options > Projects & Solutions > Build and Run,你可以将MSBuild project build ouput verbosity设置为详细的Diagnostic来检查ResolveAssemblyReferences目标在说什么。
    • 不幸的是,诊断日志没有告诉我新的信息。完全相同的错误消息,没有任何进一步(有用的)详细信息。
    • @Rhapsody,我试图重现这个问题,如果是assembly or dependency was not found,我在输出窗口中有以下内容:error CS0006: Metadata file '{FULL_ASSEMBLY_PATH}' could not be found。请确保选择了show output from : Build
    • @Snowbear 不幸的是,输出日志中没有出现关键字“CS0006”、“元数据”和“找不到”(选择了构建)。非常感谢您尝试重现该问题!)
    【解决方案2】:

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

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

    obj文件夹中,只复制生成的程序集,而不是依赖项-甚至复制本地true-。 所以如果你的测试是从这个文件夹启动的,所有的依赖都会丢失。

    【讨论】:

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

    也许启用程序集加载日志记录可以提示您为什么无法加载程序集。

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

    【讨论】:

    • “Assembly Binding Logviewer”显示为空白屏幕,“查看日志”按钮被禁用。
    • 您是否启用了程序集加载日志?默认禁用
    • 第二次启动(并打开日志记录)后,我能够看到一些日志记录。我还没有找到任何有用的东西,但我一直在寻找。
    【解决方案4】:

    在查看了一些额外的搜索结果后,我在 SA Private Accessor for method is not found 遇到了这个问题。

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

    感谢大家的帮助!

    【讨论】:

    • 我注意到这是错误的解决方案。但是现在我所有依赖于该访问器的测试都不再编译了。
    【解决方案5】:

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

    【讨论】:

      【解决方案6】:

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

      【讨论】:

        【解决方案7】:

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

        【讨论】:

          【解决方案8】:

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

          <Private>False</Private>
          

          <Private>True</Private>
          

          关于引用和通过的所有测试。

          【讨论】:

          【解决方案9】:

          确保选择依赖项 > 编辑引用 > 项目(您的项目),而不是项目的 .net 程序集

          【讨论】:

            【解决方案10】:

            我遇到了这个错误,我通过 UPDATING NUGET PACKAGES 修复了它。

            之所以有效,是因为我在解决方案中的一个项目引用了同一解决方案中包含的另一个项目的非常旧的编译版本。

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

            当我检查错误消息时,我可以看到我的项目引用了“版本 0.0.10”的依赖项,但我的解决方案包含的项目一直到“版本 0.0.30”,所以差异很大。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-09-12
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多