Проверка пакетов с 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 > 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 > 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