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



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

820   15  

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

The -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-ProjectName 'NameOfProject' - Переустановить - выполните эту команду на консоли диспетчера пакетов

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

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

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

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

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

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

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

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

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

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

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

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

для тех, кто прибывает сюда из-за падения сервера сборки, вы можете создать цель MSBuild, запустив команду exec для запуска NuGet для восстановления команда, как показано ниже (в данном случае nuget.exe находится в the .NuGet folder, а не по пути), который затем можно запустить на этапе сборки 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 Package Manager Console в Visual Studio 2012 дает вам кнопку" Восстановить " автоматически, как только он найдет любой пакет не установлен, но там в пакете.конфиг. Удивительная Особенность!

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

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

Update-Package -ProjectName 'NAME_OF_THE_PROJECT'

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

EDIT 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 файл, то вы можете игнорировать этот параметр).

Comments

    Ничего не найдено.