Проверять пакеты из NuGet в систему контроля версий? - PullRequest
87 голосов
/ 12 февраля 2011

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

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

Ответы [ 7 ]

67 голосов
/ 01 октября 2011

Нет

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

Из консоли диспетчера пакетов вам необходимо установить 'NuGetPowerTools ':

Install-Package NuGetPowerTools

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

Enable-PackageRestore

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

Source

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

30 голосов
/ 13 февраля 2011

Да. Считайте, что каталог "packages" эквивалентен каталогу "libs", который вы упомянули в своем вопросе. Именно такой подход я использую в своих проектах OSS.

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

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

6 голосов
/ 15 апреля 2016

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

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

Недавний эпизод с NPM показывает, почему: если интернет-хранилище, от которого вы зависите, прерывается, недоступно и т. Д., То что ж, вы облажались?

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

5 голосов
/ 30 июля 2011

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

В файле верхнего уровня 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>
4 голосов
/ 01 июля 2011

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

3 голосов
/ 10 декабря 2014

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

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

Кроме того, с новым форматом csproj вы можете избежать лишних файлов nuget.configа так как это интегрировано сейчас.Пожалуйста, ознакомьтесь с этой статьей, которая объясняет это лучше:

Нужно ли добавлять папку .nuget в систему контроля версий?

3 голосов
/ 20 сентября 2013

AS от 20.09.13, есть что-то под названием «Nuget Restore». Вам на самом деле не нужно проверять в папке пакета, если вы хотите это сделать. (Особенно если вы используете DVCS)

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

...