2012-02-05 2 views
101

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

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

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

+0

Да, это должно быть. – davidfowl

+0

Это самая достоверная ссылка http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages и поскольку это старая нить. Мне просто хотелось бы поделиться информацией в комментарии ... –

ответ

37

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

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

UPDATE: С выпуском NuGet 4.x и .NET Standard 2.0, когда вы используете новый формат csproj теперь вы можете использовать ссылки пакета, иронически реинтродукциями зависимости от MSBuild для восстановления пакетов , но теперь пакеты являются гражданами первого класса msbuild. Ссылка выше также делает упоминание о PackageReference, но детали следующее объявление его лучше:

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

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

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

UPDATE 2: Очевидно, что с VS2017 вы даже можете использовать ссылки на пакеты с классическими проектами csproj, но они больше не совместимы с обратной связью, и возникли некоторые проблемы с восстановлением pa ckage. Я уверен, что все будет разрешено.

+8

[Это более ясное объяснение] (http://docs.nuget.org/consume/package-restore/migrating-to-automatic-package-restore) о том, как мигрировать. Существует [удобный скрипт PowerShell на Github] (https://github.com/owen2/AutomaticPackageRestoreMigrationScript) –

+0

@CAD Bloke, да, это в списке чтения внизу, спасибо за его сужение. – Jeremy

+0

Вы можете легко обновить Nuget в VS с помощью 'Tools> Extensions & Updates> Updates'. – jocull

4

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

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

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


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

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

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

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

+1

Я думал, что ' true' в файле * .csproj должно быть достаточно информации для Visual Studio, но, возможно, это не так. – Borek

1

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

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

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

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

+0

Я не мог заставить NuGet восстановить внешние пакеты проектов. Это сработало для вас? –

+0

Да, хотя у NuGet.exe возникают проблемы с аутентификацией нашего локального репо (проверка подлинности IIS 6 + SSL + AD), в то время как PowerShell или Extension Plugin работают нормально. – si618

19

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

45

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

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

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

+0

Кстати, кто-нибудь знает, почему он не установлен на 'true' по умолчанию? – ajukraine

+2

Это скорее проблема конфиденциальности. «Простой акт подачи запроса через Интернет может показывать информацию о пользователе (например, с IP-адреса пользователя, мы можем приблизиться к ее местоположению)». См. Статью [Обновление и согласие пакета в блоге Nuget] (http://blog.nuget.org/20120518/package-restore-and-consent.html) – Gan

+1

FYI: Если NuGet.exe отсутствует в папке .nuget, в контекстном меню Solution будет показано «Включить восстановление пакета NuGet», хотя NuGet Package Restore уже настроен. После сборки опция уйдет. – comecme

1

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

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