如何修复无法加载文件或程序集'nunit.engine,版本=3.7.0.0

How to fix Could not load file or assembly 'nunit.engine, Version=3.7.0.0

我有一个带有单独测试项目的 Web 应用程序,使用 NUnit 进行 运行 单元测试。当我的测试项目试图发现测试时,我 运行 出现以下异常:

An exception occurred while test discoverer 'NUnit3TestDiscoverer' was loading tests. Exception: Could not load file or assembly 'nunit.engine, Version=3.7.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb' or one of its dependencies. The system cannot find the file specified.

这当然是一个非常常见的错误,但我无法在任何地方找到对这个特定程序集的引用,也找不到实际导致问题的其他依赖项。另一件事是我目前安装了 3.9.0 NUnit 而不是上面提到的 3.7.0。 我已经尝试清理和重建解决方案并恢复所有 Nuget 包并清除 obj 目录也没有帮助。

您似乎在项目文件中提到了 3.7.0 作为 GAC 的引用,并且该 dll 在 GAC 中不可用,这很有可能会导致失败。

最新版本的 Visual Studio 经常发生这种情况。我们不确定原因,但原因是 Visual Studio 缓存中的测试适配器副本不完整。修复方法是删除缓存副本并重新启动 Visual Studio.

根据您的用户名和版本,您要删除的文件夹是C:\Users\username\AppData\Local\Temp\VisualStudioTestExplorerExtensions\NUnit3TestAdapter.3.x.x

https://github.com/nunit/nunit3-vs-adapter/issues/261 and http://hermit.no/how-to-resolve-cases-of-visual-studio-no-tests-appearing/

在我的例子中是

An exception occurred while invoking executor 'executor://nunit3testexecutor/': Could not load file or assembly 'nunit.engine, Version=3.9.0.0

问题是:在我的测试项目中,我导入了 NUnit3TestAdapter.3.13.0

  <Import Project="..\..\..\packages\NUnit3TestAdapter.3.13.0\build\net35\NUnit3TestAdapter.props" Condition="Exists('..\..\..\packages\NUnit3TestAdapter.3.13.0\build\net35\NUnit3TestAdapter.props')" />

在另一个项目中,我引用了 NUnit.Engine.3.10.0。 但是 NUnit3TestAdapter.3.13.0 在包中有 Nunit.Engine.3.9.0.

\packages\NUnit3TestAdapter.3.13.0\build\net35

所以,解决方案是将另一个项目中的 Nunit.Engine 降级到 3.9 版本。

我的解决方法略有不同,因为我的 Temp 目录中没有该文件夹。 我不得不使用 NuGet 降级 nUnit 的版本,构建并重新编译,然后再次更新到最新版本。