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).
Решение
- Изменить юнит тест
.csproj
и измените ссылки на элементы из<Shadow Include="Test References\namespace.accessor" />
в<None Include="Test References\namespace.accessor" />
(Shadow
=>None
). - А еще лучше, просто удалите все
.accessor
файлы из проекта модульного тестаTest References
папка.
В идеале вы также должны переписать свои модульные тесты, чтобы удалить ссылки на частные методы, либо перестроив архитектуру для разделения задач, либо изменив свойства на internal
и используя "друг" с InternalsVisibleToAttribute
,
Для тех, кому по какой-то причине необходимо продолжить поддержку тестирования частных методов, в этом же посте предлагаются следующие предложения для логического вопроса. "What is available for me then?"
:
Для тех, кто хочет продолжить тестирование внутренних API, у вас есть три варианта:
- Используйте класс Microsoft.VisualStudio.TestTools.UnitTesting.PrivateObject для помощи в доступе к внутренним и частным API в вашем коде. Это находится в сборке Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll.
- Создайте структуру отражения, которая сможет отражать ваш код для доступа к внутренним или частным API.
- Если код, к которому вы пытаетесь получить доступ, является внутренним, вы можете получить доступ к своим API-интерфейсам с помощью атрибута InternalsVisibleToAttribute, чтобы ваш тестовый код мог иметь доступ к внутренним API-интерфейсам.
Тем не менее, нет никакой хорошей замены для Генерации кода для новых функций, добавленных командами языка. Вы можете создать заглушки TestMethod, а затем удалить внутренний код. Вам нужно всего лишь сохранить заглушку.
Дальнейшее чтение / источники, которые помогли мне собрать это воедино:
- VS 2005 ASP.NET объяснение аксессоров
- Статья блога 2008 года, объясняющая, как обойти это для серверов сборки
- MSDN ветка форума с обсуждением о целях доступа, реализации и обходных путях. Начните примерно на 1/3 вниз.
- MSDN BaseShadow документы
- Класс MSDN PrivateObject
Щелкните правой кнопкой мыши на папке с ссылками на проект. Добавить ссылку> Сборки> Расширения. Проверьте 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. В моем случае это простое решение устранило все ошибки.