До NuGet общепринятой «передовой практикой» была регистрация всех внешних библиотек DLL, используемых в проекте. Обычно в каталоге Libs
или 3rdParty
.
При работе с NuGet должен ли я возвращаться в packages
каталог или есть ли способ для MSBuild автоматически загружать необходимые пакеты из канала nuget?
version-control
msbuild
nuget
Скотт Вайнштейн
источник
источник
Ответы:
Нет
Поскольку этот вопрос был задан, теперь существует простой рабочий процесс для использования NuGet без передачи пакетов в систему управления версиями.
Из консоли диспетчера пакетов вам необходимо установить NuGetPowerTools :
Затем, чтобы ваши проекты поддерживали восстановление пакетов, вам нужно запустить другую команду:
Теперь вы готовы зафиксировать свою базу кода без папки пакетов. Предыдущая команда изменила файлы вашего проекта, поэтому, если пакеты отсутствуют, они автоматически загружаются и добавляются.
Источник
Использование NuGet без передачи пакетов в систему управления версиями
источник
Enable NuGet Package Restore
. См. Документы .Да. Считайте, что каталог "packages" эквивалентен вашему каталогу "libs", который вы упомянули в своем вопросе. Я лично использую этот подход в своих проектах OSS.
Мы изучаем функции, которые позволили бы MSBuild автоматически загружать необходимые пакеты, но это не было реализовано (начиная с NuGet 1.1).
Я думаю, что некоторые люди, возможно, уже реализовали такие функции самостоятельно, но мы планируем рассмотреть возможность включения этой функции в NuGet 1.2 или 1.3, надеюсь.
источник
Несмотря на все ответы здесь, это по-прежнему просто ужасное решение - не иметь всех ваших зависимостей под «каким-то» контролем версий.
Для GIT это будет означать GIT-LFS.
Недавний эпизод с NPM показывает, почему: если интернет-репозиторий, от которого вы зависите, ломается, недоступен и т. Д., Тогда вы облажались, не так ли?
Вы больше не можете создавать свои вещи - и, следовательно, не можете их доставить.
источник
npm
сломался, потому что он не исключил пакеты, а фактически удалил их. NuGet этого не делает; если в какой-то момент вы не можете получить доступ к NuGet, что-то ужасно неправильно. Я не думаю, что хранение огромного количества зависимостей в git - хорошее решение: просто заблокируйте свои зависимости определенной версией и создайте зеркало между вами и в Интернете, если это важно для вас.Задав вопрос, я применил следующий подход, чтобы мне не приходилось проверять каталог пакетов верхнего уровня .
В файле 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>
источник
Я понимаю, что реальность была другой, когда этот вопрос был первоначально опубликован и дан ответ, но, к счастью, ответ немного изменился. Теперь можно использовать NuGet для загрузки зависимостей через MSBuild с помощью события Pre-Build. Вам не нужно помещать папку пакетов в репозиторий кода, все зависимости будут загружены и / или обновлены при сборке. Возможно, это обходной путь, но выглядит он достаточно прилично. Подробнее см. Следующее сообщение в блоге: http://blog.davidebbo.com/2011/03/using-nuget-without-committing-packages.html
источник
По состоянию на 20.09.13 есть что-то под названием «Восстановление Nuget». На самом деле вам не нужно проверять папку пакета, если вы хотите это сделать. (Особенно, если вы используете DVCS)
Проверьте это: Использование NuGet без фиксации пакетов в системе контроля версий http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages
источник
Этот пост сильно устарел. Ответ по-прежнему НЕТ, но решение изменилось. Начиная с NuGet 2.7+, вы можете включить автоматическое восстановление пакетов без включения файла NuGet.exe в исходный код (это, мягко говоря, нежелательно), и если вы используете любую современную DVCS, вы можете игнорировать папку пакетов. Если вам нужны какие-либо особые настройки, вы можете создать файл nuget.config в корне решения.
http://docs.nuget.org/docs/reference/package-restore
Кроме того, с новым форматом csproj вы также можете избежать лишних файлов nuget.config, поскольку они интегрированы сейчас. Пожалуйста, ознакомьтесь с этим постом, который объясняет это лучше:
Следует ли добавить папку .nuget в систему контроля версий?
источник