Должна ли добавлена ​​папка .nuget для контроля версий?

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

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

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

Ответ 1

Этот пост старый, вы больше не должны использовать восстановление пакета 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, но они больше не совместимы с обратной связью, и возникли некоторые проблемы с восстановлением подзависимостей пакетов. Я уверен, что все будет разрешено.

Ответ 2

@Ответ Richard Szalay прав - вам не нужно совершать 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 автоматически.

Ответ 3

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

Ответ 4

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

Ответ 5

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

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

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


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

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

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

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

Ответ 6

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

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

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

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

Ответ 7

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

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