【问题标题】:NUnit failed to load DLLNUnit 加载 DLL 失败
【发布时间】:2016-08-03 03:48:07
【问题描述】:

尝试在 Visual Studio 中运行单元测试时收到以下错误消息:

NUnit failed to load w:\Repos\trading.tools\Trading.Tools.Test\bin\x64\Debug\Trading.Tools.Test.dll

我正在使用

  • Visual Studio 社区 2013
  • NUnit 适配器 3.4.0.0
  • NUnit 3.4.1

奇怪的是,我有另一个项目,它的设置方式与这个相同,而且效果很好。

我还下载了 NUnit 3.4.1 并安装了它。当我跑步时

nunit3-console.exe Trading.Tools.Test.dll

一切正常。 有什么想法我能做什么?

非常感谢 康斯坦丁

编辑#1

这是尝试运行所有测试时 Visual Studio 的完整控制台输出。

Test run will use DLL(s) built for framework Framework45 and platform X86. Following DLL(s) will not be part of run: 
Trading.Tools.Test.dll, Trading.Tools.dll are built for Framework Framework45 and Platform X64.
 Go to http://go.microsoft.com/fwlink/?LinkID=236877&clcid=0x409 for more details on managing these settings.
NUnit Adapter 3.4.0.0: Test discovery starting
NUnit failed to load w:\Repos\trading.tools\Trading.Tools.Test\bin\x64\Debug\Trading.Tools.Test.dll
Assembly contains no NUnit 3.0 tests: w:\Repos\trading.tools\Trading.Tools\bin\x64\Debug\Trading.Tools.dll
NUnit Adapter 3.4.0.0: Test discovery complete

如您所见,很明显 NUnit 需要 x86 构建,但我为 x64 平台构建。同样,如果我使用 nunit3-console.exe 执行它,我的 x64 构建就可以正常工作。

我在csproj 文件中看到的是这样的:

<Reference Include="nunit.framework, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\packages\NUnit.3.4.1\lib\net45\nunit.framework.dll</HintPath>
</Reference>

这里的奇怪之处在于它指定使用 Version=2.6.4.14350 但引用的是 3.4.1 dll。

所以从这一点开始的下一个问题是如何让 NUnit 执行我的 x64 构建?有什么想法吗?

【问题讨论】:

  • 删除您的 bin 和 obj 文件夹并重新构建它并尝试运行。我认为它会起作用
  • 您是否检查过该文件是否存在以及您构建/运行程序时的时间戳?
  • @ShakirAhamed,我删除了这两个目录。还是失败了……
  • 从您的参考文件夹中删除 Nunit 参考,然后使用 Install-Package NUnit Nuget 包管理器再次安装它
  • 您的任何测试或被测代码是否尝试加载文件或程序集?如果是这样,他们是否假定当前目录?

标签: c# visual-studio-2013 nunit


【解决方案1】:

我也遇到过类似的问题,关键是 Visual Studio 中的 Test Runner 声明只测试 x86 程序集。我由此假设它会强制使用 x86 NUnit 运行器。要更改此设置(至少在 VS2015 和 VS2017 中),请转到 Test > Test Settings > Default Processor Architecture > X64

【讨论】:

  • 非常感谢,成功了!你知道这个设置保存在哪个文件中吗?
  • 不幸的是,不确定,但是因为它似乎从一个解决方案到另一个解决方案发生变化,并且在切换配置时不会改变,我怀疑它会成为 suo 文件的一部分。
【解决方案2】:

你也可以在runsettings文件中设置执行目标。然后,您必须选择该文件。这应该使解决方案更稳定。 仅设置此项的运行设置文件可能如下所示:

如下图所示:

当您从测试菜单 (1) 中选择它时,它将被添加为菜单 (2) 中的选定项,然后 Rebuild 将使测试出现在测试资源管理器中 (3)

使用 runsettings 文件还有一个额外的好处,那就是它可以在 TFS 构建系统上正常运行,如果你使用它的话。我已经写了一篇关于这个问题的博文,见http://hermit.no/how-to-control-the-selection-of-test-runner-in-tfsvsts-making-it-work-with-x86x64-selected-targets/

【讨论】:

    【解决方案3】:

    我无法执行我的测试并发现这是问题之一。事实证明,我的 TestFixtureinternal。只需将其切换为 public 即可解决我的问题。

    【讨论】:

    【解决方案4】:

    在尝试上述所有其他响应均未成功后,以下方法对我有用:

    在我的情况下,.NET 项目和解决方案位于已安装的驱动器上(我使用 MacBook 和 Parallels 进行 .NET 开发)。挂载还包含 NUnit 试图从中读取“测试”DLL 的 /bin/debug 和 /bin/release 位置。

    解决方法是将解决方案/项目文件移动到我的 Windows 映像的 C: 驱动器。测试立即被发现。

    显然共享/安装位置不合其喜好。我不知道为什么,因为挂载是永久性的,并且对 Windows 映像上的所有用户都是可读/写的。我怀疑文件权限问题,或者运行 NUnit 发现逻辑的用户/进程无法访问整个挂载。

    【讨论】:

      【解决方案5】:

      我在编写单元测试方法时碰巧遇到了这个错误。并注意到缺少一个依赖 dll 加载的根本原因。在修改测试方法代码并尝试运行它后,此错误(“NUnit 无法加载 .dll”)显示在输出(“测试”)窗口中。更新依赖 dll 的 nuget 包后,nunit 开始选择测试项目 dll 并执行测试用例。

      【讨论】:

        【解决方案6】:

        今天我也遇到了这个问题(在基于 .NET Framework 4.8 的 NUnit 项目中)。我的解决方案是同时安装 Microsoft.NET.Test.Sdk 包。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-02-28
          • 2012-12-21
          • 2012-12-29
          • 2020-09-01
          • 2019-07-10
          • 2015-10-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多