Как исправить Не удалось загрузить файл или сборку '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, что, вероятно, вызывает сбой.