Откуда TFS знает о nuget?

#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

Если вы добавите решение в систему управления версиями и соберете его на сервере сборки 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. Ваши сборки должны нормально восстанавливать пакеты.