Чи слід додавати папку .nuget до контролю версій?


107

З новішими версіями NuGet можна налаштувати проект для автоматичного відновлення пакетів NuGet, щоб packagesпапку не потрібно було включати у сховище вихідного коду. Добре.

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

Як ви з цим справляєтесь люди? Додати .nuget до керування джерелом? Запустити якийсь скрипт командного рядка перед відкриттям рішення?


Це найбільш автентичне посилання docs.nuget.org/docs/workflows/… і оскільки це стара тема. Я хотів би лише поділитися інформацією в коментарі ...
Naveed Butt

Відповіді:


47

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



@CAD Bloke, так, це в списку читання внизу, дякую, що ви звузили його.
Джеремі

Ви можете легко оновити Nuget в VS за допомогою Tools > Extensions & Updates > Updates.
jocull

47

Відповідь @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.


До речі, хтось знає, чому це не встановлено trueза замовчуванням?
ajukraine

2
Це більше стосується конфіденційності. "Простий акт здійснення запиту через Інтернет може виявити інформацію про користувача (наприклад, з IP-адреси користувача, ми можемо приблизно визначити її місцезнаходження)." Дивіться статтю про відновлення та згоду пакета в блозі Nuget
Gan

1
FYI: Якщо NuGet.exe відсутній у папці .nuget, у контекстному меню рішення з’явиться "Увімкнути відновлення пакета NuGet", навіть якщо відновлення пакета NuGet вже налаштовано. Після збірки варіант піде.
comecme

Це має бути прийнятою відповіддю, IMO ... Якщо NuGet.exe був надзвичайно крихітним, я, можливо, скажу, що його слід керувати джерелом і вирішувати все, що вам потрібно зробити у вашому файлі ігнорування. Але це 1,5 мега, це для мене достатньо, щоб завжди робити це Ганом.
Брайан Маккей

Де завантажується форма nuget.exe? Що робити, якщо у мого будівельника немає Інтернету?
бітбонк


20

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


4

Хоча мені зазвичай не подобається ідея додавання exe до керування джерелами, я б припустив, що контроль джерела повинен містити все, що потрібно для відкриття, створення та виконання проекту.

У цьому випадку це здається, що папка .nuget є необхідною залежністю. Тому він повинен бути під контролем джерела.

Єдине питання, що вам потрібно дослідити, - це те, як NuGet буде реагувати, якщо ця папка буде позначена лише для читання, що зробить TFS після її реєстрації.


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

Я б припустив, що, ймовірно, ви хочете зробити NuGet вимогою, яку необхідно встановити на кожній робочій станції розробників.

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

Крім того, я б сказав, що ви можете безпосередньо зв’язатися з NuGet, щоб запитати, як саме це має працювати.


1
Я подумав, що <RestorePackages>true</RestorePackages>у файлі * .csproj має бути достатньо інформації для Visual Studio, але, можливо, це не так.
Борек Бернард

1

Тепер, коли nuget підтримує відновлення пакету, ми розглянемо його уважніше.

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

Таким чином ми можемо автоматично висувати нові версії для всіх розробників та проектів. Для проектів з гілок випуску, а не HEAD, ми можемо вказати перегляд посилання svn: externals, якщо ми хочемо залишити нутет в спокої.

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


Не вдалося NuGet відновити зовнішні пакети проектів. Це працювало для вас?
Догухан Улука

Так, хоча здається, що у NuGet.exe виникають проблеми з автентифікацією на нашому локальному репо (IIS 6 + SSL + AD автентифікація), поки Powershell або Extension Plugin працюють нормально.
si618

1

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

Окрім цієї причини, ви повинні дозволити Visual Studio здійснювати завантаження пакетів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.