Использование NuGet без коммита пакетов в систему контроля версий

nuget

Оригинальный рабочий процесс NuGet предполагал коммит папки Packages в систему контроля версий. Причиной этого является то, что разработчики обычно делают когда у них нет NuGet: они создают папку Lib или ExternalDependencies, сохраняют там бинарники и коммитят их в систему контроля версий, позволяя другим сбилдиться.

Хотя это было приемлемо для некоторых пользователей, оказалось что многие не хотят коммитить пакеты в систему контроля версий.  Когда используется DVCS такая как Mercurial или Git, то коммит бинарников может очень сильно увеличить размер репозитория, делая клонирование все более и более мучительным. Фактически, это был один из самых топовых запросов на issue трекере NuGet.

Хорошей новостью является то, что теперь NuGet предлагает рабочий процесс, который позволяет решить эту проблему, и его очень легко настроить. Вот как это сделать:

Включите восстановление пакетов во время билда

Начиная с NuGet 2.0, восстановление пакетов во время билда требует явного согласия пользователя. Это должно быть сделано на каждой машине которая билдит проект.

В Visual Studio, включите «Allow NuGet to download missing packages during build«. Эта настройка размещена в Options -> Package Manager -> General.

 Конфигурация разрешения восстановления пакетов  Использование NuGet без коммита пакетов в систему контроля версий

Что бы включить восстановление пакетов для билд серверов без установленной Visual Studio, вы можете также установить переменную окружения EnableNuGetPackageRestore в «true».

Настройка проекта

Допустим вы имеете Solution, который либо уже использует NuGet, или планирует использовать его, и вы хотите установить безкоммитный рабочий процесс.

Нажмите правой кнопкой мыши на элементе Solution в окне Solution Explorer и выберите Enable NuGet Package Restore.

enable package restore  Использование NuGet без коммита пакетов в систему контроля версий

Готово! Вы все настроили.

Детали

Так что же точно это сделало? Была добавлена solution папка .nuget содержащую NuGet.exe и MsBuild файл NuGet.targets. Точнее, были скачаны и распакованы два NuGet пакета:  NuGet.Bootstrapper для NuGet.exe и NuGet.Build для NuGet.targets. Также каждый проект в солюшене был изменен чтобы импортировать  MsBuild задачу NuGet.targets.

package restore solution  Использование NuGet без коммита пакетов в систему контроля версий

И наконец, это добавило файл NuGet.config со следующим XML:

<configuration>
  <solution>
    <add key="disableSourceControlIntegration" value="true" />
  </solution>
</configuration>

Настройка disableSourceControlIntegration указывает системе контроля версий такой как TFS не добавлять NuGet папку packages в check-in список.

С такими настройками, каждый раз когда проект будет компилироваться, задача билда будет искать в файле packages.config каждого проекта, и для каждого указанного пакета, убеждаться что соответствующий пакет существует в папке packages. Для любого отсутствующего пакета, задача билда скачает и распакует пакет.

В этом сценарии, NuGet возьмет четко указанную версию при восстановлении пакета. Никаких обновлений выполнено не будет.

Mono

На mono вы можете запустить xbuild на файле проекта или на солюшене и это должно успешно восстановить пакеты для любого проекта у которого включено восстановление пакетов.

Источник: http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>