Как исправить Не удалось загрузить файл или сборку 'nunit.engine, Version = 3.7.0.0
У меня есть веб-приложение с отдельным тестовым проектом с использованием NUnit для запуска unittests. Когда мой тестовый проект пытается обнаружить тесты, я сталкиваюсь с следующим исключением:
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
тоже не помогла.
Ответы
Ответ 1
Это происходит довольно часто с последними версиями 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 и http://hermit.no/how-to-resolve-cases-of-visual-studio-no-tests-appearing/
Ответ 2
Кажется, что в файле проекта вы упомянули ссылку 3.7.0 как GAC, и эта DLL недоступна в GAC, которая, как мы надеемся, приведет к сбою.
Ответ 3
В моем случае это было
Возникла исключительная ситуация при вызове executor 'executor://nunit3testexecutor/': не удалось загрузить файл или сборку '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.