Пакет восстановления NuGet TFS не работает — Microsoft.webapplication.targets

Недавно я начал внедрять автоматическую сборку для нашего программного пакета с использованием TFS. Я пытаюсь установить как можно меньше на сервер сборки и хотел бы избежать проверки сторонних библиотек в нашем исходном репозитории.

В одном из наших проектов происходит сбой сборки с отсутствующей зависимостью:

<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />

Это неудивительно, так как у меня не установлена ​​Visual Studio (или Team Explorer и т. д.) на сервере сборки. Чтобы обойти эту проблему, я пытаюсь использовать NuGet с автоматическим восстановлением пакетов, чтобы предоставить соответствующую библиотеку (MSBuild.Microsoft.VisualStudio.Web.targets). Я прочитал тонну сообщений как здесь, так и в других местах, но не смог заставить это работать должным образом. В основном я:

  1. Задайте переменную среды на сервере сборки: EnableNuGetPackageRestore=true.
  2. Следуйте инструкциям по адресу: http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages
  3. Все файлы из SolutionDir.nuget добавлены в репозиторий TFS.
  4. Добавьте папку пакетов и файл respositories.config в репозиторий TFS.
  5. Подтверждено, что на nuget.targets ссылался проект-нарушитель.
  6. Проверено, что для параметра "RestorePackages" в проблемном проекте задано значение true.
  7. Отложил все эти предметы и поставил в очередь частную сборку с нужным набором полок.

Сборка запускается, но пакеты nuget никогда не загружаются. Кроме того, я не вижу записей журнала для какой-либо «RestoreCommand» (или других элементов из nuget.targets) в файле журнала сборки. Это похоже на то, что nuget.targets полностью игнорируется. Я надеюсь, что просто слишком долго смотрел на это и пропустил какой-то простой шаг.

Изменить: я должен был упомянуть, что решение отлично работает на локальной машине. Я обновил ссылки на проекты, чтобы они ссылались на библиотеки из NuGet. Если я удалю все локальные пакеты, он их загрузит и соберет правильно.


person mmcd    schedule 12.09.2013    source источник
comment
Как вы установили переменную окружения? Вы уверены, что это не для каждого пользователя, и вы отбрасывали машину, чтобы убедиться, что она была применена ко всем процессам и т. д.?   -  person Nick Nieslanik    schedule 30.10.2013


Ответы (1)


Я знаю, что это старый вопрос, но вот как я заработал.

Я следовал приведенным здесь инструкциям, поэтому мне не нужно добавлять папку пакетов в TFS: http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

Затем мне пришлось использовать простой файл сборки, упомянутый в этой ссылке http://docs.nuget.org/docs/reference/package-restore-with-team-build, который просто заранее запускает восстановление пакета.

Все, что мне нужно было изменить в файле сборки, — это путь к моему файлу решения и nuget.exe, поскольку мой отличался.

Затем я настроил TFS для использования файла build.proj, а не решения.

Обратите внимание, что я также обновился до nuget 2.7, поэтому мне не нужно было включать файл .targets.

person hutchonoid    schedule 08.11.2013