Проверка пакетов с NuGet на контроль версий?

До NuGet общепринятой "лучшей практикой" была проверка всех внешних библиотек DLL, используемых в проекте. Обычно в каталоге Libs или 3rdParty.

При работе с NuGet я должен зарегистрировать каталог packages, или есть способ, чтобы MSBuild автоматически загружал необходимые пакеты из фида nuget?

Ответ 1

Спрашивая вопрос, я применил следующий подход, так что мне не нужно проверять каталог toplovel Packages.

В файле toplevel build.msbuild:

<Target Name="NuGet">
    <ItemGroup>
       <NuGetPackage Include="*\packages.config" />
    </ItemGroup>
    <Exec Command='libs\NuGet.exe install "%(NuGetPackage.FullPath)" -o Packages'  />

    <!-- optional for project that has JavaScript content -->
    <CreateItem Include="Packages\*\Content\Scripts\*">
       <Output TaskParameter="Include" ItemName="NuGetJSFiles"/>
    </CreateItem>
    <Copy SourceFiles="@(NuGetJSFiles)" DestinationFolder="MainProj\Scripts\" OverwriteReadOnlyFiles="true" SkipUnchngedFiles="true" />
    <Delete Files="MainProj\Scripts\.gitignore" />
    <WriteLinesToFile File="MainProj\Scripts\.gitignore" Lines="%(NuGetJSFiles.Filename)%(NuGetJSFiles.Extension)" /
    <Delete Files="@(PostNuGetFiles)" />
</Target>

В каждом файле project.csproj

<Target Name="BeforeBuild">
    <Error Condition="!Exists('..\Packages\')" Text="You must run &gt; msbuild build.msbuild to download required NuGet
Packages" />

    <!-- optional for project that has JavaScript content -->
   <ReadLinesFromFile File="Scripts\.gitignore">
     <Output TaskParameter="Lines" ItemName="ReqJSFiles" />
   </ReadLinesFromFile>
   <Message Text="@(ReqJSFiles)" />
   <Error Condition="!Exists('Scripts\%(ReqJSFiles.Identity)')" Text="You must run &gt; msbuild build.msbuild to download required NuGet JS Package - Scripts\%(ReqJSFiles.Identity)" />
 </Target>

Ответ 2

Нет

Поскольку этот вопрос был задан, теперь есть простой рабочий процесс для использования NuGet без передачи пакетов в исходное управление

В консоли вашего диспетчера пакетов вам необходимо установить "NuGetPowerTools" :

Install-Package NuGetPowerTools

Затем, чтобы ваши проекты поддерживали восстановление пакета, вам нужно запустить еще одну команду:

Enable-PackageRestore

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

Источник

Использование NuGet без передачи пакетов в исходный код

Ответ 3

Да. Рассмотрите каталог "packages", который будет эквивалентен вашему каталогу "libs", который вы упомянули в своем вопросе. Это тот подход, который я лично принимаю с моими проектами OSS.

Мы изучаем функции, которые позволят MSBuild автоматически загружать необходимые пакеты, но это не было реализовано (начиная с NuGet 1.1).

Я думаю, что некоторые люди, возможно, уже внедрили такие функции самостоятельно, но наш план состоит в том, чтобы взглянуть на то, что эта функция встроена в NuGet 1.2 или 1.3, надеюсь.

Ответ 4

Несмотря на все ответы здесь, это все равно простое олевое "ужасное решение", чтобы не иметь всех ваших зависимостей под "некоторым видом" контроля версий.

Для GIT это будет означать GIT -LFS.

Недавний эпизод с NPM показывает, почему: Если интернет-репозиторий, из которого вы зависите, ломается, недоступны и т.д., хорошо, тогда вы ввернуты или нет?

Вы больше не можете создавать свои вещи - и, следовательно, не можете доставить.

Ответ 5

Я понимаю, что реальность была другой, когда этот вопрос был изначально отправлен и ответил, но, к счастью, ответ немного изменился. Теперь можно использовать NuGet для загрузки зависимостей через MSBuild с использованием события Pre-Build. Вам не нужно класть папку пакетов в репозиторий кода, все зависимости будут загружаться и/или обновляться при сборке. Это может быть обходным путем, но оно выглядит достаточно прилично. Более подробную информацию см. В следующем сообщении в блоге: http://blog.davidebbo.com/2011/03/using-nuget-without-committing-packages.html

Ответ 6

AS от 09/20/13, есть что-то, что называется "Восстановление Nuget". Вам действительно не нужно проверять папку пакета, если вы этого хотите. (Особенно, если вы используете DVCS)

Проверьте это: Использование NuGet Без передачи пакетов в исходный код http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

Ответ 7

Этот пост стал очень устаревшим. Ответ по-прежнему нет, но решение изменилось. Начиная с NuGet 2.7+ вы можете включить автоматическое восстановление пакета без включения файла NuGet.exe в ваш источник (это, по меньшей мере, нежелательно), и если вы используете любой современный DVCS, вы можете игнорировать папку пакетов. Если вам нужны специальные настройки, вы можете создать файл nuget.config в корневом каталоге решения.

http://docs.nuget.org/docs/reference/package-restore