Как получить NuGet для установки / обновления всех пакетов в пакетах.конфиг?

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

15 ответов


можно использовать 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.исполняемый.

чтобы обновить все пакеты в вашем решении, сначала восстановите их и затем вы можете использовать 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

если вы хотите переустановить пакеты в те же версии, что и ранее установлен, то вы можете использовать с .

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

переустановите все пакеты во всех проектах текущего решения:

Update-Package -Reinstall

переустановите все пакеты в конкретном проекте текущего решения (спасибо unarity и ashes999):

Update-Package -ProjectName 'YourProjectNameGoesHere' -Reinstall

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

PM> Install-Package NuGetPowerTools
PM> Enable-PackageRestore

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

обновление:

эта функциональность встроена в NuGet для 1.6 с интеграцией visual studio, поэтому вам даже не нужно устанавливать nugetpowertools или вводить команды. Все, что вам нужно сделать, это

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

читать в этой статье для более подробной информации.


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

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

# 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) }

Update-Package -ProjectName 'YourProjectNameGoesHere' -Reinstall

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


с последним выпуском NuGet 2.5 теперь есть кнопка "Обновить все" в диспетчере пакетов: http://docs.nuget.org/docs/release-notes/nuget-2.5#Update_All_button_to_allow_updating_all_packages_at_once


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

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

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

не удается найти nuget.exe

чтобы решить эту проблему: измените эту строку в своем NuGet.файл цели и установка правда:

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

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


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

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

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

на и я только что использовал

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

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

переустановите все пакеты во всех проектах текущего решения:

Update-Package-ProjectName 'NameOfProject' - Переустановить - выполнить эту команду в консоли диспетчера пакетов

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

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

кроме того, я бы рекомендовал вам, когда вы вытаскиваете изменения с удаленного сервера, нажать кнопку "Восстановить пакеты", которая будет показана Visual studio.


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

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

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

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

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

Я удалил все папки пакета в $(SolutionDir)/packages (под веткой выпуска), а затем выполнил полную перестройку, и на этот раз сборка удалась.
... и тогда, конечно, я вернулся и удалил папки пакетов из системы управления версиями (в ветке trunk и release). Я не понимаю (пока), является ли следует также удалить.

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

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

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


для тех, кто прибывает сюда из-за падения сервера сборки, вы можете создать цель MSBuild, выполняющую команду exec для запуска восстановление nuget команда, как показано ниже (в этом случае nuget.exe находится в.папка nuget, а не по пути), которая затем может быть запущена на шаге сборки TeamCity непосредственно перед созданием решения

<Target Name="BeforeBuild">
  <Exec Command="..\.nuget\nuget restore ..\MySolution.sln"/>
</Target>

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

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

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


теперь консоль диспетчера пакетов Nuget в Visual Studio 2012 дает вам кнопку" Восстановить " автоматически, как только он найдет любой пакет, не установленный, но там в пакете.конфиг. Удивительная Особенность!


в VS2012 V11, если я использую "- переустановить " в конце строки, это не работает.

поэтому я просто использовал:

Update-Package -ProjectName 'NAME_OF_THE_PROJECT'

Я знаю, что это старый пост, но подумал, что это может быть полезно. Если вам необходимо игнорировать определенные пакеты во время процесса обновления (как и любые пакеты, обновляющие ссылки на JavaScript), используйте следующий сценарий PowerShell (убедитесь, что источник пакета установлен в "все" в консоли диспетчера пакетов):

РЕДАКТИРОВАТЬ 2014-09-25 10: 55 AM EST - Исправлена ошибка в скрипте

$packagePath = "packages.config"
$projectName = "MyProjectName"

$packagesToIgnore = @(
    "bootstrap",
    "jQuery",
    "jquery-globalize",
    "jquery.mobile",
    "jQuery.jqGrid",
    "jQuery.UI.Combined",
    "jQuery.Validation",
    "Microsoft.jQuery.Unobtrusive.Validation",
    "Modernizr",
    "Moment.js"
)

[xml]$packageFile = gc $packagePath
$packagesToProcess = $packageFile.packages.package | Where-Object {$packagesToIgnore -notcontains $_.id}

$packagesToProcess | % { Update-Package -reinstall -projectname $projectName -id $($_.id) }

в Visual Studio 2017 - при компиляции с помощью IDE-он загрузит все отсутствующие пакеты nuget и сохранит в папке "пакеты".

но на машине сборки компиляция была выполнена с использованием msbuild.исполняемый. В этом случае я загрузил nuget.исполняемый.

во время каждого процесса сборки перед выполнением msbuild.исполняемый. Он выполнит -> nuget.exe восстановить NAME_OF_SLN_File (если есть только один .Sln файл, то вы можете игнорировать этот параметр).