Как исправить Не удалось загрузить файл или сборку 'nunit.engine, Version=3.7.0.0

У меня есть веб-приложение с отдельным тестовым проектом, использующим 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 каталог тоже не помог.

5 ответов

Решение

Это происходит довольно часто с последними версиями 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/

В моем случае это было

Исключение при вызове исполнителя 'Execution://nunit3testexecutor/': не удалось загрузить файл или сборку 'nunit.engine, Версия =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. Мне пришлось понизить версию nUnit с помощью NuGet, собрать и перекомпилировать перед последующим обновлением до последней версии.

Я исправил аналогичную проблему, обновив все следующие пакеты NuGet до последних стабильных версий:

      <PackageReference Include="NUnitXml.TestLogger" Version="3.1.15">
  <PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0">
  <PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.7.2">
  <PrivateAssets>all</PrivateAssets>
</PackageReference>

Изначально я не думал оMicrosoft.NET.Test.Sdkи получал что-то вроде

Исключение произошло при вызове исполнителя «executor://nunit3testexecutor/»: метод не найден: «NUnit.Engine.ITestEngine NUnit.Engine.TestEngineActivator.CreateInstance()».

или

Не удалось загрузить тип «System.Web.UI.ICallbackEventHandler» из сборки «System.Web, Version=4.0.0.0».

Кажется, в файле проекта вы упомянули ссылку 3.7.0 как GAC, и что dll недоступна в GAC, что, вероятно, вызывает сбой.

Другие вопросы по тегам