2012-03-30 3 views
15

СЦЕНАРИЙNuGet - управление и удаление пакетов мульти версии в одном решении

Один VS решение с п проектов. Проект A: пакет ссылок Y v1, пакет ссылок B проекта Y v2. В настоящее время невозможно обновить все ссылки на пакет Y для всех проектов в решении, используя диалог управления пакетами NuGet на уровне решения, это можно сделать только тогда, когда все проекты ссылаются на ту же версию пакета Y. Не большой сделка только для двух проектов, но я имею дело с большим количеством проектов, которые благодаря плохому управлению пакетами ссылаются на многие версии пакета, когда они должны ссылаться на одну и ту же версию.

Прежде чем я проведу день, создав консольное приложение. для автоматического обновления всех файлов package.config для решения, чтобы каждый ссылочный пакет ссылался только на последнюю версию (последняя ссылка, а не самая последняя, ​​с исключениями/оговорками и т. д.) .... есть ли инструмент/метод для выполнения это уже? Или какой-то другой подход, о котором я не знаю?

+0

пятницу днем ​​это прекрасное время для этого! – Bond

+0

Вы пробовали использовать sed или awk? –

+0

или powershell !! –

ответ

10

Вы можете выполнить это в диспетчере пакетов Nuget для решения (Чтобы найти меню, щелкните его правой кнопкой мыши или зайдите в «Инструменты»> «Диспетчер пакетов библиотеки»). Вкладка «Обновление» в этом диалоговом окне предложит обновить для нескольких проектов, где это обновление применимо. То же самое относится к удалению с вкладки Installed.

Или с открытым решением откройте консоль NuGet, запустите «Update-Package», чтобы обновить все пакеты для всех проектов. Она также может работать для обновления конкретных пакетов/проектов:

Update-Package [-Id] <string> [-IgnoreDependencies] [-ProjectName <string>] [-Version <string>] [-Safe] [-Source <string>] [-IncludePrerelease] 

Это будет найти те же обновления, чем в диалоге, просто убедитесь, что правильный канал (или «All») выбран в «пакете Источник:» выпадающий ,

пример:

PM> install-package NUnit -version 2.5.9.10348 -ProjectName ProjectA 
Successfully installed 'NUnit 2.5.9.10348'. 
Successfully added 'NUnit 2.5.9.10348' to ProjectA. 

PM> install-package NUnit -version 2.5.10.11092 -ProjectName ProjectB 
Successfully installed 'NUnit 2.5.10.11092'. 
Successfully added 'NUnit 2.5.10.11092' to ProjectB. 

PM> update-package 
Updating 'NUnit' from version '2.5.9.10348' to '2.6.0.12054' in project 'ProjectA'. 
Successfully removed 'NUnit 2.5.9.10348' from ProjectA. 
Successfully installed 'NUnit 2.6.0.12054'. 
Successfully added 'NUnit 2.6.0.12054' to ProjectA. 
Successfully uninstalled 'NUnit 2.5.9.10348'. 
Updating 'NUnit' from version '2.5.10.11092' to '2.6.0.12054' in project 'ProjectB'. 
Successfully removed 'NUnit 2.5.10.11092' from ProjectB. 
Successfully added 'NUnit 2.6.0.12054' to ProjectB. 
Successfully uninstalled 'NUnit 2.5.10.11092'. 
2

Во-первых, только изменение файлов xml для NuGet недостаточно для изменения ссылок. На самом деле, иногда вы получаете ошибки при изменении файлов packages.config вручную. консоль менеджера пакетов имеет возможность обновлять все пакеты в решении; вы можете просто вызвать команду «Get-Project -All | Update-Package».

И, во-вторых, перед вызовом этой команды убедитесь, что у вас есть подходящие источники пакетов.

+0

И во-вторых ... – Steven

+0

Эта консольная команда сообщила, что обновления для всех пакетов refs в каждом proj в решении отсутствуют, но есть обновления, и я могу обновить их по одному в диалоговом окне. –

+0

Позвольте мне проверить еще раз. – daryal