【问题标题】:Could not load file or assembly 'Assembly.dll' - vstest无法加载文件或程序集“Assembly.dll”-vstest
【发布时间】:2016-09-14 13:30:43
【问题描述】:

我在启动一个单元测试时遇到这样的错误: 测试方法 TestName 抛出异常: System.IO.FileNotFoundException:无法加载文件或程序集“Assembly.dll”或其依赖项之一。指定的模块不能是 找到了。

此问题仅在使用 vstest.console.exe 时出现。当我通过 Visual Studio (2013) 运行我的测试时,它不会发生。我知道通过 Visual Studio 运行测试时会运行 vstest.executionengine.exe。可以在 vstest.executionengine.exe.config 文件中启用它的日志(但它没有给我任何有用的信息)。

我已经按照这些类型的许多其他问题中的建议使用了 Dependency Walker: 而且我看到我在 System32 目录或程序执行目录中将所有 dll 都涂成红色(Dependency walker 认为它们丢失了)。测试的执行如下所示:

"C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe" "dll1.dll" "dll2.dll" (等所有 dll带测试) /InIsolation /UseVsixExtensions:false /Platform:x86 /Framework:framework40 /Logger:trx /Tests:TestName (以及所有可能丢失的 dll,只有 API-MS-WIN(...) 命名的 dll 不在 TestWindow 或 System32 目录中)。 我已经检查过了。 我在 x86 和 x64 版本中都安装了 Microsoft Visual C++ Redistributable 2008、2010、2012 和 2013。 丢失的 dll 的名称和测试的名称已更改,当然它们还有其他名称 :)

【问题讨论】:

  • 你试过assembly binding logging吗?验证 vstest.console.exe 是否从同一位置开始并在其环境中使用相同的 PATH。您可以使用 Process Explorer 捕获成功的vstest.executionengine.exe 的命令行/环境。
  • 抱歉这么晚才回复。正如您所想的那样,Jeroen Mostert :) PATH 变量是我使用的 2 个环境的另一个变量。 PATH 中没有一个目录,因此无法找到该 DLL。我在星期四发现了这件事,但当时我没有发布答案。

标签: c# unit-testing dll visual-studio-2013 filenotfoundexception


【解决方案1】:

经过调查: PATH 变量是我使用的 2 个环境的另一个变量。一个目录不在 PATH 环境变量中,因此无法找到该 DLL。将此密钥目录添加到 PATH 变量解决了该问题。 PATH 变量不完整的环境是 Jenkins。

【讨论】:

    猜你喜欢
    • 2021-02-06
    • 2020-08-17
    相关资源
    最近更新 更多