#tfs #nuget
#tfs #nuget
Вопрос:
Из этой статьи —
«Однако бывают случаи, когда на самом деле сборкой занимается не человек, и поэтому он не может предоставить согласие таким образом. (И где Visual Studio даже не установлена.) Прототипным примером является сервер сборки. В этом случае NuGet также будет искать переменную среды с именем EnableNuGetPackageRestore . Чтобы включить восстановление пакета для сценариев, в которых опция Visual Studio непрактична, установите для этой переменной значение true. «
Откуда TFS вообще знает, как вызвать nuget? Должен ли я устанавливать nuget exe?
Комментарии:
1. Есть ли конкретная проблема, которую вы пытаетесь устранить?
Ответ №1:
Как вы указали в комментарии, «Включить восстановление пакета NuGet» больше не является рекомендуемым методом для достижения этой цели. Документы NuGet объясняют это лучше всего. По сути, поскольку этот метод интегрирован в MSBuild, пакеты, расширяющие сборку, будут загружены слишком поздно. Хотя я не уверен, какие пакеты делают это в настоящее время, похоже, что есть большие планы на будущее NuGet (новый ASP.NET Реализация vNext custom CLR — один из примеров того, к чему это ведет).
Хорошей новостью является то, что альтернативу действительно легко настроить. Если вы находитесь в VS, вы буквально ничего не делаете (если вы не отключили автоматическое восстановление пакетов в прошлом). Если у вас есть сервер сборки, вам просто нужно внести некоторые небольшие изменения в свой файл .proj. Если вы не знакомы с MSBuild, это может показаться сложным, но на самом деле это довольно просто. Секрет в этом фрагменте кода:
<Target Name="RestorePackages">
<Exec Command="amp;quot;$(ToolsHome)NuGetNuGet.exeamp;quot; restore amp;quot;%(Solution.Identity)amp;quot;" />
</Target>
Опять же, подробности приведены в документах (в частности, в этом). Если у вас есть какие-либо вопросы, не бойтесь обращаться: сообщество SO здесь, чтобы помочь!
Комментарии:
1. У меня есть цели «MvcBuildViews» и «EnsuerBclBuildImported», вы бы порекомендовали сделать их зависимыми от пакетов восстановления или использовать цели «BeforeBuild» или «AfterBuild», которые рекомендует мой файл proj?
2. Поможет еще несколько деталей. Сколько решений у вас есть и какую сборку вы используете? У вас есть специальный файл msbuild proj или это просто файлы вашего проекта?
3. Один файл sln, и я менял фактический файл .csproj, и это единственный файл проекта, который является просто веб-приложением MVC. Выделенная сборка была бы хороша, если прямолинейно, однако я действительно не хотел углубляться в изучение msbuild
4. Вы можете просто поместить восстановление пакета в BeforeBuild. Если вы не используете сервер сборки, вам даже не нужно беспокоиться об этом. Вы используете сервер сборки?
5. Да, это так. Спасибо за помощь
Ответ №2:
Откуда TFS вообще знает, как вызвать nuget? Должен ли я устанавливать nuget exe?
Нет, вы должны включить восстановление пакета для решения, что можно сделать из контекстного меню файла решения в обозревателе решений. Это добавит папку с именем .nuget
в ваше решение, и в этой папке вы найдете NuGet.exe
.
Если вы добавите решение в систему управления версиями и соберете его на сервере сборки NuGet.exe
, исполняемый файл будет использоваться целевыми объектами NuGet msbuild для восстановления пакетов из NuGet как часть сборки.
Таким образом, вам не нужно устанавливать NuGet на сервер сборки — он становится частью вашего проекта и помещается под контроль версий.
Комментарии:
1. У меня нет этой папки
2. @user210757: «вы должны включить восстановление пакета для решения , которое можно выполнить из контекстного меню для файла решения в обозревателе решений»
3. Да, я просто читаю об этом (на самом деле аргументы против этого) blog.davidebbo.com/2014/01 /…
4. @user210757: запись в блоге, похоже, не учитывает серверы сборки, и ваш вопрос был конкретно о том, как восстановить пакеты NuGet на сервере сборки. Как указано в записи в блоге: «при сборке из командной строки вам необходимо самостоятельно запустить «восстановление nuget» перед msbuild». Итак, я думаю, вы могли бы изменить рабочий процесс сборки для запуска
nuget restore
перед запуском msbuild вместо включения восстановления пакета NuGet для решения.5. Я слышу вас — я просто хочу сделать это правильно, поэтому, если .nuget/ папка постепенно закрывается, я бы попробовал путь блога. Но я не могу найти никакой причины, объясняющей, почему автоматическое восстановление пакета лучше
Ответ №3:
Если вы настроили свои решения на восстановление пакетов NuGet, а затем на сервере сборки с учетной записью сборки откройте vs и установите Разрешить NuGet загружать недостающие пакеты во время сборки в Visual Studio. Ваши сборки должны нормально восстанавливать пакеты.