MSBuild не восстанавливает пакеты NuGet - PullRequest
0 голосов
/ 28 июня 2018

У меня есть решение, состоящее из нескольких проектов, некоторые из которых ссылаются на пакеты NuGet. Есть веб-сайт, но также есть сервис, который должен быть построен для x86 или x64; сервис - это то, что я сейчас пытаюсь построить.

Мы находимся на TFS 2013; для этого конкретного решения я использую Visual Studio 2015. Проверены «Разрешить NuGet загружать отсутствующие пакеты» и «Автоматически проверять отсутствующие пакеты во время сборки Visual Studio».
Я запускал NuGet 3.4.4, я обновился до 4.6.2.

Я могу нормально строить из Visual Studio. Но автоматические сборки на сервере терпят неудачу; но что еще более важно, он также не работает, если я пытаюсь запустить MSBuild локально Похож на этот вопрос и этот .

Насколько я могу судить, шаблон выпуска - правильная версия (12), но я не думаю, что это проблема с сервером, так как я не могу собрать и локально.

Пакеты не находятся под контролем исходного кода.
У меня есть nuget.config в корневой папке решения; Ранее он находился в папке .nuget под корнем решения. У меня нет (и никогда не было) nuget.exe или nuget.targets в папке nuget. Вот конфиг:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <clear />
    <add key="NuGetCache" value="\\BuildServer\NuGetPackages" />
    <add key="NuGetV2" value="https://www.nuget.org/api/v2/" />
  </packageSources>
  <packageRestore>
    <add key="enabled" value="True" />
    <add key="automatic" value="True" />
  </packageRestore>
  <solution>
    <add key="disableSourceControlIntegration" value="true"/>
  </solution>
</configuration>

Если я (вручную) очистил пакеты и запустил

MSBuild /p:Configuration=Release;Platform=x64

(из командной строки VS2015) происходит сбой, поскольку он не может найти указанные пакеты.

Как предлагается в этом ответе , я удалил цели EnsureNuGetPackageBuildImports из своих проектов; у них не было тега RestorePackages или импорта для nuget.targets.

Я попытался добавить событие перед сборкой, чтобы выполнить восстановление пакета (да, я понимаю, что это «старый» способ действий)

"C:\Program Files (x86)\NuGet\nuget.exe" restore -ConfigFile "$(SolutionDir)nuget.config" -PackagesDirectory "$(SolutionDir)packages"

... но он постоянно терпит неудачу («Команда завершилась с кодом 1»). Если я скопирую командную строку NuGet из выходных данных MSBuild и выполню ее самостоятельно, это будет успешно.

Я заметил одну странную вещь: в событии перед сборкой NuGet говорит: «Папка d: \ path \ to \ solution \ project1 \ bin \ Release-x64 не содержит файл msbuild solution или packages.config для восстановить". Я не уверен, почему он ищет их в выходной папке.


У меня есть обходной путь для этого. У нас есть сетевой ресурс, настроенный для использования в качестве своего рода кэша пакетов. Если я отредактирую файлы проекта вручную и изменим каждую ссылку так, чтобы HintPath указывал на \\BuildServer\NuGetPackages\, а не ..\packages\, сборка будет успешной. Но это некрасиво и, что более важно, значительно снижает производительность Visual Studio.

...