Как мне получить NuGet для установки / обновления всех пакетов в packages.config? - PullRequest
629 голосов
/ 29 июля 2011

У меня есть решение с несколькими проектами.Большинство сторонних ссылок отсутствуют, но для каждого проекта есть файл packages.config. Как заставить NuGet установить / обновить все необходимые пакеты? Нужно ли это делать из командной строки для каждого проекта?

Ответы [ 16 ]

811 голосов
/ 30 июля 2011

Вы можете использовать nuget.exe для восстановления ваших пакетов или с установленным NuGet 2.7 или выше, вы можете просто скомпилировать свое решение в Visual Studio, которая также восстановит отсутствующие пакеты.

Для NuGet.exe вы можете запустить следующую команду для каждого проекта.

nuget install packages.config

Или с помощью NuGet 2.7 вы можете восстановить все пакеты в решении с помощью командной строки.

nuget restore YourSolution.sln

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

В NuGet 2.7 и более поздних версиях Visual Studio автоматически восстановит отсутствующие пакеты NuGet при создании решения, поэтому вам не нужно будет использоватьNuGet.exe.

Чтобы обновить все пакеты в вашем решении, сначала восстановите их, а затем вы можете использовать NuGet.exe для обновления пакетов или из Visual Studio вы можете обновить пакеты из диспетчера пакетов.Окно консоли или, наконец, вы можете использовать диалоговое окно «Управление пакетами».

Из командной строки вы можете обновить пакеты в решении до последней версии, доступной на nuget.org.

nuget update YourSolution.sln

Примечаниечто это не будет запускать сценарии PowerShell ни в каких пакетах NuGet.

В Visual Studio вы можете использовать Консоль диспетчера пакетов , чтобы также обновить пакеты.Преимущество этого заключается в том, что любые сценарии PowerShell будут запускаться как часть обновления, при этом использование NuGet.exe не будет их запускать.Следующая команда обновит все пакеты в каждом проекте до последней версии, доступной на nuget.org.

Update-Package

Вы также можете ограничить это одним проектом.

Update-Package -Project YourProjectName

Если выЕсли вы хотите переустановить пакеты на те же версии, которые были установлены ранее, то вы можете использовать аргумент -reinstall с командой Update-Package.

Update-Package -reinstall

Вы также можете ограничить это одним проектом.

Update-Package -reinstall -Project YourProjectName

Опция -reinstall сначала удалит, а затем снова установит пакет в проект.

Или вы можете обновить пакеты, используя диалог Manage Packages.

Обновления:

  • 2013/07/10 - Обновлено с информацией о восстановлении nuget в NuGet 2.7
  • 2014 /07/06 - Обновлено с информацией об автоматическом восстановлении пакетов в Visual Studio и обновлено с другими изменениями в NuGet.
  • 2014/11/21 - Обновлено синформация о -reinstall
504 голосов
/ 02 сентября 2013

Переустановите все пакеты во ВСЕХ ПРОЕКТАХ текущего решения:

Update-Package -Reinstall

Переустановите все пакеты в СПЕЦИАЛЬНЫХ ПРОЕКТАХ текущего решения ( Благодаря унарности и ashes999 ):

Update-Package -ProjectName 'YourProjectNameGoesHere' -Reinstall
167 голосов
/ 06 декабря 2011

Существует другой, более новый и более быстрый способ сделать это из Visual Studio.Прочтите этот пост Дэвида Эббо и обратитесь к разделу комментариев, если у вас возникнут проблемы.По сути, вы делаете следующее в приглашении диспетчера пакетов:

PM> Install-Package NuGetPowerTools
PM> Enable-PackageRestore

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

Обновление:

Эта функциональность встроена в Nuget 1.6 с визуальной студийной интеграцией, поэтому вам даже не нужно устанавливать NuGetPowerTools или вводить команды.Все, что вам нужно сделать, это

Щелкните правой кнопкой мыши узел решения в обозревателе решений и выберите Включить восстановление пакета NuGet.

Читать эту статью дляболее подробная информация.

18 голосов
/ 01 февраля 2013

Вот еще одно решение, если вы используете проекты веб-сайтов или не хотите включать восстановление пакета NuGet.

Вы можете использовать консоль диспетчера пакетов, чтобы перечислить все пакеты в файле package.config и переустановить их.

# read the packages.config file into an XML object
[xml]$packages = gc packages.config

# install each package 
$packages.packages.package | % { Install-Package -id $($_.id) -Version $($_.version) }
15 голосов
/ 23 октября 2013
Update-Package -ProjectName 'YourProjectNameGoesHere' -Reinstall

Это лучший и самый простой пример, который я нашел. Он переустановит все нюансы, перечисленные в packages.config, и сохранит текущие версии. Замените YourProjectNameGoesHere именем проекта.

10 голосов
/ 12 июня 2013

В последней версии NuGet 2.5 в диспетчере пакетов теперь есть кнопка «Обновить все»: http://docs.nuget.org/docs/release-notes/nuget-2.5#Update_All_button_to_allow_updating_all_packages_at_once

6 голосов
/ 01 декабря 2015

Я использую Visual Studio 2015, и приведенные выше решения у меня не сработали, поэтому я сделал следующее:

Удалите папку пакетов из моего решения, а также папки bin и obj из каждого проекта.в решении и перестройте его.

Возможно, у вас будет следующая ошибка:

невозможно найти nuget.exe

Чтобы решить эту проблему: Измените эту строку в файле NuGet.targets и установите для него значение true:

<DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">true</DownloadNuGetExe>

Ссылка: https://stackoverflow.com/a/30918648 и https://stackoverflow.com/a/20502049

4 голосов
/ 30 августа 2017

После 3 часов поиска и расследования.

У меня были проблемы с этим, потому что у нас в команде два участника (с помощью управления исходными кодами GitHub), потому что мы не ограничивали файлы для пакетов для отправки в удаленный репозиторий, один из членов команды отправлял пакеты на сервер иУ меня есть тянуть, что изменения в моем местном.

После этого у меня возникла та же проблема, что и в ПО, также я не смог опубликовать свой проект API на сервере.

В то время как я только что использовал

Update-Package -Reinstall - запустите эту команду на консоли диспетчера пакетов

Эта команда переустановит все ваши пакеты, которые вы использовали в своем решении.(Для каждого проекта)

Переустановите все пакеты во ВСЕХ ПРОЕКТАХ текущего решения:

Update-Package -ProjectName 'NameOfProject' -Reinstall - запустите эту команду для PackageКонсоль менеджера

Эта команда переустановит все ваши пакеты, относящиеся к проекту, который вы указали после "-ProjectName".И я думаю, что это лучше, потому что мне пришлось ждать полчаса, чтобы переустановить все пакеты в решении.

За это большое спасибо Родольфу Броку .

Также я бы порекомендовал вам при извлечении изменений с удаленного сервера нажать кнопку «Восстановить пакеты», которая будет отображаться в Visual Studio.

3 голосов
/ 14 июля 2015

Если вы устанавливаете Nuget 2.8, установите флажок

Tools >> Nuget Manager >> Package Manager Settings >> Automatically check for missing packages during build

в Visual Studio. Если этот флажок установлен, то просто перестройте проект, чтобы восстановить все ваши справочные библиотеки.

3 голосов
/ 24 апреля 2014

Я считаю, что первое, что вам нужно сделать, это включить функцию восстановления пакета .Смотрите также здесь .Это делается на уровне решения (не проекта).

Но это не поможет вам полностью - я столкнулся с подобной проблемой после включения функции восстановления.(VS2013, NuGet 2.8.)

Оказалось, что я (непреднамеренно) зафиксировал пакеты для контроля исходного кода при фиксации проекта - , но Visual Studio (и плагин управления исходным кодом)старательно игнорировал двоичные файлы при выполнении регистрации.

Проблема возникла, когда я создал ветку выпуска.Моя локальная копия ветки dev / main / trunk имела двоичные файлы, потому что именно там я первоначально установил / загрузил пакеты.
Однако в новой ветке релиза

  • папки пакетови .nupkg файлы были все там - так что NuGet не думал, что было что-либо восстанавливать;
  • , но в то же время ни одна из DLL не присутствовала - т.е. отсутствовали сторонние ссылки- поэтому я не смог собрать.

Я удалил все папки с пакетами в $(SolutionDir)/packages (в ветке релиза), а затем запустил полное перестроение, и на этот раз сборка прошла успешно.
... и затем, конечно, я вернулся и удалил папки с пакетами из системы контроля версий (в стволе и ветке релиза).Я не уверен (пока) о том, следует ли удалять файл repositories.config.

Многие компоненты, установленные для вас с помощью шаблонов проектов - по крайней мере, для веб-проектов - являются пакетами NuGet,То есть эта проблема не ограничивается добавленными вами пакетами.
Поэтому включите восстановление пакетов сразу после создания проекта / решения, а перед выполнением начальной регистрации очистите папку packages (и убедитесь, чтовы передаете папку .nuget в систему контроля версий).

Отказ от ответственности: я видел другой ответ здесь на SO, который указывал, что очистка папки packages была частью разрешения.Это поставило меня на правильный путь, поэтому я хотел бы отдать должное автору, но больше не могу найти этот вопрос / ответ.Я опубликую правку, если наткнусь на нее.

Я бы также отметил, что Update-Package -reinstall изменит файлы .sln и .csproj / .vbproj.По крайней мере, так оно и было в моем случае.Который ИМХО делает этот вариант гораздо менее привлекательным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...