У нас есть решение, которое содержит проект, который использует TestFramework из NuGet. У нас есть другое решение, которое ссылается на этот проект.
Структура файловой системы проекта/решения выглядит следующим образом:
- Tests
- Tests
- Properties
- AssemblyInfo.cs
- packages.config
- Tests.csproj
- Tests.sln
- RefToTests
- RefToTests.sln
RefToTests.sln
содержит ссылку на Tests.csproj
.
Если я открою Tests.sln
и попытаюсь его создать, я получаю сообщение об ошибке, которое говорит мне, что ссылки на NuGet не найдены. Нет проблем - откройте решение NuGet для решения, нажмите "Восстановить" и снова создайте его. Работает отлично.
В той же чистой папке, но теперь откройте RefToTests.sln
. Такая же ошибка. Тот же рабочий процесс. Это восстановит пакеты до RefToTest\packages
. Проект ищет их в ..\packages
, что означает Tests\packages
. Это не будет создано.
Мы попытались исправить это, вручную изменив папку на пакеты в файле проекта с ..\packages
до $(SolutionDir)packages
. Это отлично поработало. Пропущенные пакеты загружаются автоматически (ничего себе, что не работает без этих изменений).
Но теперь давайте обновим пакет. Менеджер пакетов не может найти эти ссылки в файле проекта, оставляет старые записи нетронутыми и добавляет совершенно новые ссылки. Проект не будет построен в любом решении. Этот шов станет ошибкой в управлении проектами NuGet. По моему мнению, разрешение пакета должно потерпеть крах, если оно найдет $(SolutionDir)
, или управление пакетами должно быть в состоянии справиться с этим.
Но какое решение? Измените каталог на $(SolutionDir)
и проверьте каждый файл проекта после каждого обновления? Оставить указанную папку как есть и не выполнять очистку в репозитории?