Нужно ли добавлять папку .nuget в систему контроля версий? - PullRequest
106 голосов
/ 05 февраля 2012

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

Однако эта команда добавляет новую папку .nuget и в ней есть двоичный файл NuGet.exe.Это также может быть автоматически воссоздано в Visual Studio, поэтому неправильно добавлять его в систему управления версиями.Однако без этой папки Visual Studio даже не сможет правильно загрузить решение.

Как вы, люди, справляетесь с этим?Добавить .nuget в систему контроля версий?Запустить какой-нибудь скрипт командной строки перед открытием решения?

Ответы [ 7 ]

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

Это сообщение старое, вы больше не должны использовать пакет восстановления NuGet уровня решения. Начиная с версии 2.7+ в настройке NuGet есть опция автоматического восстановления пакетов при сборке. Таким образом, папку .nuget можно удалить, а параметр удалить из ваших проектов.

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

ОБНОВЛЕНИЕ: С выпуском NuGet 4.x и .NET Standard 2.0, когда вы используете новый формат csproj, вы можете теперь использовать ссылки на пакеты, иронично возвращая зависимость от msbuild для восстановления пакетов, но теперь пакеты являются первоклассным гражданином msbuild. В приведенной выше ссылке также упоминается PackageReference, но в следующем объявлении это лучше:

https://blog.nuget.org/20170316/NuGet-now-fully-integrated-into-MSBuild.html

И анонс NuGet 4.x RTM, который по иронии судьбы не так полезен:

https://blog.nuget.org/20170308/Announcing-NuGet-4.0-RTM.html

ОБНОВЛЕНИЕ 2: Очевидно, что с VS2017 вы даже можете использовать ссылки на пакеты в классических проектах csproj, но они больше не имеют обратной совместимости, и были некоторые проблемы с восстановлением зависимостей пакетов. Я уверен, что все будет решено.

46 голосов
/ 06 ноября 2012

@ Ответ Ричарда Сзалая верный - вам не нужно совершать nuget.exe.Если по каким-либо причинам Visual Studio не загружает автоматически nuget.exe, убедитесь, что в файле nuget.targets указан следующий параметр true :

<!-- Download NuGet.exe if it does not already exist --> 
<DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">true</DownloadNuGetExe>

Закройте решение VS, открыть его и построить.Visual Studio должна автоматически загрузить nuget.exe.

22 голосов
/ 06 февраля 2012

Согласно этой теме , папка .nuget должна контролироваться версией.

20 голосов
/ 22 августа 2012

Вам нужно совершить .nuget\nuget.targets, но не nuget.exe. Цели загрузят исполняемый файл, если он не существует, если вы измените DownloadNuGetExe на true в nuget.targets

4 голосов
/ 05 февраля 2012

Хотя мне обычно не нравится идея добавления exe в систему управления версиями, я бы предложил, чтобы система управления исходными кодами содержала все, что требуется для открытия, сборки и выполнения проекта.

В этом случае кажется, что папка .nuget является обязательной зависимостью. Поэтому он должен быть под контролем источника.

Единственный оставшийся вопрос, который вам нужно исследовать, это то, как NuGet будет реагировать, если эта папка помечена только для чтения, что будет делать TFS после ее регистрации.


Обновление: Я провел немного больше исследований по этому вопросу, поскольку никогда раньше не использовал NuGet. http://blog.davidebbo.com/2011/03/using-nuget-without-committing-packages.html

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

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

Кроме того, я бы сказал, что вы можете напрямую связаться с NuGet и спросить их, как именно это должно работать.

1 голос
/ 21 июня 2016

У нас есть файл nuget.config в папке, так как он содержит ссылки на наш внутренний сервер Nuget, используя область Источники пакетов: https://docs.nuget.org/consume/nuget-config-settings

Помимо этой причины, вы должны разрешить Visual Studioобрабатывать загрузку пакетов.

1 голос
/ 06 февраля 2012

Теперь, когда nuget поддерживает восстановление пакетов, мы смотрим на него более внимательно.

Мы используем Subversion для контроля исходного кода, и я изначально считаю, что .nuget следует добавить в наш репозиторий, но добавить с svn: externals , чтобы он указывал на одно местоположение.

Таким образом, мы можем автоматически распространять новые версии для всех разработчиков и проектов.Для проектов в ветках релиза, а не в HEAD, мы можем указать ревизию ссылки svn: externals , если мы хотим оставить только nuget.

У нас много проектов, поэтомуозначает не дублировать nuget.exe несколько раз в репо.

...