VS2017 Не удалось загрузить файл или сборку Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll или одну из ее зависимостей

При попытке открыть старое решение в VS2017 есть старый проект модульного тестирования, который создает проблемы при сборке.

Я продолжаю получать следующую ошибку при создании этого тестового проекта:

Не удалось загрузить файл или сборку 'file:///C:\Projects\MyProj\Test\DAL\UnitTestProj\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll' или одну из ее зависимостей. Система не может найти указанный файл.

Я проверил ссылки проекта, и он, кажется, ссылается Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll, Кроме того, нет ошибок кода. Как я мог когда-нибудь выяснить, если это одна из его зависимостей, которую он не может найти?

7 ответов

Решение

У меня была похожая проблема (с дополнительным сообщением The "BuildShadowTask" task failed unexpectedly) с проектом, изначально разработанным с VS2010, и потратил последние несколько часов на изучение еще одного унаследованного аспекта процесса сборки.

Существует большая вероятность того, что вы имеете дело с закрытыми файлами доступа (.accessor), которые устарели в VS2012 ( первоисточник - 404). Это было предвещено в объявлении от команды VS2010, что они больше не работают над этими функциями.

Также есть вероятность, что вы имеете дело с ошибочными ссылками на неправильную версию UnitTestFramework, но восстановление NuGet должно исправить это. Если нет, посмотрите этот поток GitHub для возможного исправления (вручную измените ссылку на общедоступную папку) или перейдите к новым пакетам MSTest.TestAdapter и MSTest.TestFramework (см. Поток поддержки MSDN).

Решение

  1. Изменить юнит тест .csproj и измените ссылки на элементы из <Shadow Include="Test References\namespace.accessor" /> в <None Include="Test References\namespace.accessor" /> (Shadow => None).
  2. А еще лучше, просто удалите все .accessor файлы из проекта модульного теста Test References папка.

В идеале вы также должны переписать свои модульные тесты, чтобы удалить ссылки на частные методы, либо перестроив архитектуру для разделения задач, либо изменив свойства на internal и используя "друг" с InternalsVisibleToAttribute,


Для тех, кому по какой-то причине необходимо продолжить поддержку тестирования частных методов, в этом же посте предлагаются следующие предложения для логического вопроса. "What is available for me then?":

Для тех, кто хочет продолжить тестирование внутренних API, у вас есть три варианта:

  1. Используйте класс Microsoft.VisualStudio.TestTools.UnitTesting.PrivateObject для помощи в доступе к внутренним и частным API в вашем коде. Это находится в сборке Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll.
  2. Создайте структуру отражения, которая сможет отражать ваш код для доступа к внутренним или частным API.
  3. Если код, к которому вы пытаетесь получить доступ, является внутренним, вы можете получить доступ к своим API-интерфейсам с помощью атрибута InternalsVisibleToAttribute, чтобы ваш тестовый код мог иметь доступ к внутренним API-интерфейсам.

Тем не менее, нет никакой хорошей замены для Генерации кода для новых функций, добавленных командами языка. Вы можете создать заглушки TestMethod, а затем удалить внутренний код. Вам нужно всего лишь сохранить заглушку.


Дальнейшее чтение / источники, которые помогли мне собрать это воедино:

Щелкните правой кнопкой мыши на папке с ссылками на проект. Добавить ссылку> Сборки> Расширения. Проверьте Microsoft.VisualStudio.QualityTools.UnitTestFramework 10.1 и снимите отметку с любой более старой версии.

Это связано с Visual studio Enterprise 2015, добавление нового нагрузочного теста завершилось неудачно: на нем было указано "Невозможно найти сборку".

Из-за сборки, установленной в публичных сборках, отображается как версия 10.0.0.0, которая отсутствует в GAC,

GAC имел только 10.1.0.0. После того, как GAC обновится до 10.0.0.0 и перезапустит VS 2015. должен решить проблему, подобную этой.

Еще несколько подробностей для лучшего рассуждения: путь к системной сборке и путь к файлу проекта DLL... \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ Common7 \ IDE \ PublicAssemblies \ Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll

.CSProj справочная версия

У меня была похожая проблема (компилировать проект на сервере Jenkins)

Решение. Включите VS.QualityTools.UnitTestFramework в эталонный проект с диспетчером пакетов:PM>NuGet\Install-Package VS.QualityTools.UnitTestFramework — версия 15.0.27323.2https://www.nuget.org/packages/VS.QualityTools.UnitTestFramework

Я собирал старый продукт на нашем сервере сборки и столкнулся с этой ошибкой. Установил все комбинации инструментов сборки Visual Studio и плагинов, которые только мог себе представить.

В конечном итоге сработало следующее решение: установить Visual Studio 2015. Полную версию, а не BuildTools.

У меня была такая же проблема, когда я обновлял проект до .Net4.8 в Visual Studio 2022, ранее мы использовали Visual Studio 2017.

Ошибка:
Не удалось загрузить задачу "BuildShadowTask" из сборки ***\Microsoft.VisualStudio.TestTools.BuildShadowsTask.dll. Не удалось загрузить файл или сборку «file:///***Microsoft.VisualStudio.TestTools.BuildShadowsTask.dll» или одну из ее зависимостей.

Решение: я удалил файлы «.accessor» из проекта, поскольку они используются для доступа к закрытым методам (скорее всего, метод доступа устарел). Затем мы использовали класс «PrivateObject» для доступа к закрытым членам в UnitTest. Позже мы обновили кейс Unit Test. Ссылки на код можно найти в следующих статьях.

Частные методы модульного тестирования?

Модульное тестирование: раскрытие частных членов

Попробуйте полностью удалить Visual Studio 2017 (не ремонтировать). Затем скачайте последнюю версию и установите ее. Не забудьте проверить, добавлен ли MSBuild в установочные файлы. Не забудьте удалить папку внутри Documents: Documents\Visual Studio 2017. В моем случае это простое решение устранило все ошибки.

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