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

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

Ответы [ 16 ]

2 голосов
/ 01 ноября 2018

Я попытался Update-Package -reinstall, но в пакете произошел сбой, и остановил обработку всех оставшихся пакетов проектов в моем решении.

Я закончил с моим скриптом, который перечисляет все файлы package.config и запустил Update-Package -Reinstall -ProjectName prj -Id pkgдля каждого проекта / пакета.

Надеюсь, кому-то это может пригодиться:

$files = Get-ChildItem -Recurse -Include packages.config;

[array]$projectPackages = @();
$files | foreach { [xml]$packageFile = gc $_; $projectName = $_.Directory.Name; $packageFile.packages.package.id | foreach { $projectPackages += @( ,@( $projectName, $_ ) ) } }

$projectPackages | foreach { Update-Package -Reinstall -ProjectName $_[0] -Id $_[1] }

Редактировать: Это ошибка, которая у меня была: Update-Пакет: не удалось найти пакет EntityFramework.BulkInsert-ef6.Существующие пакеты должны быть восстановлены перед установкой или обновлением. Ручной запуск Update-Package -Reinstall -ProjectName my_prj -Id EntityFramework.BulkInsert-ef6 работал очень хорошо.

2 голосов
/ 13 апреля 2016

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

<Target Name="BeforeBuild">
  <Exec Command="..\.nuget\nuget restore ..\MySolution.sln"/>
</Target>
1 голос
/ 25 сентября 2014

Я знаю, что это старый пост, но подумал, что это может быть полезно. Если вам необходимо игнорировать определенные пакеты во время процесса обновления (например, любые пакеты, которые обновляют ссылки 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) }
1 голос
/ 17 мая 2014

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

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

Update-Package -ProjectName 'NAME_OF_THE_PROJECT'
1 голос
/ 14 января 2014

теперь консоль диспетчера пакетов Nuget в Visual Studio 2012 автоматически предоставляет кнопку «Восстановить», как только она находит любой пакет, не установленный, но находящийся в файле package.config. Потрясающая особенность!

0 голосов
/ 27 марта 2018

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

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

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

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