NuGet для решений с несколькими проектами - PullRequest
146 голосов
/ 24 марта 2011

Предположим, у меня есть решение с 3 проектами:

  • Core
  • UI
  • Тесты

Некоторые из пакетов NuGetЯ использую, будет применяться ко всем 3 проектам.Некоторые из них будут применяться только к пользовательскому интерфейсу и тестам, а другие - только к тестам (например, NUnit).

Каков правильный способ настроить это с помощью NuGet?

  1. Должен ли я использовать «Добавить ссылку на пакет библиотеки» во всех трех проектах в любое время, когда мне понадобится ссылка?
  2. Должен ли я использовать «Добавить ссылку на пакет библиотеки» в первый раз, когда мне нужен пакет, а затем использовать Добавить ссылку-> Обзор для последующего использования?

В любом случае сколько packages.config файлов у меня должно быть?

Ответы [ 6 ]

234 голосов
/ 28 декабря 2011

Для всех, кто сталкивается с этим, теперь есть следующая опция:

Щелкните правой кнопкой мыши свое решение> Управление пакетами NuGet для решения ...

... или:

Инструменты> Диспетчер пакетов библиотеки> Управление пакетами NuGet для решения ...

И если вы перейдете в область Установленные пакеты, вы можете «управлять» одним пакетом для каждого проекта в решении.

75 голосов
/ 03 апреля 2011

Вы можете использовать консоль для нацеливания на несколько проектов

Tools > Library Package Manager > Package Manager Console

, затем использовать эту команду

Get-Project PROJECT-NAMES-WITH-COMMAS | Install-Package PACKAGENAME

, например

Get-Project Core,UI | Install-Package FluentDateTime
20 голосов
/ 04 мая 2011

Эта сладкая сделка работает для меня:

PM> Get-Project -all | where {$_.Name -match "Songhay.Silverlight" -and
    $_.Name -notmatch "ApplicationLoader" -and $_.Name -notmatch ".Xml"}
    | ForEach-Object {Install-Package MvvmLight -project $_.Name}
12 голосов
/ 25 марта 2011

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

Вы даже можете отфильтровать команду Get-Project -All и нацелить ее на подмножество списка проектов.

8 голосов
/ 24 марта 2011

Вы должны использовать «Добавить ссылку на пакет библиотеки» для всей вашей внешней библиотеки в каждом проекте в вашем решении.В конечном итоге вы получите пакет package.config для каждого проекта.

Однако вы загрузите пакет только один раз и повторно используете его локально для всех остальных ваших проектов.

2 голосов
/ 02 октября 2017

В Консоль диспетчера пакетов вы можете написать следующую команду :

Get-Project -all | ForEach-Object {Get-Package -ProjectName $_.Name -filter 
PACKAGE_NAME} | where-object { $_.id -eq 'PACKAGE_NAME' } | Install-Package 
PACKAGE_NAME -Version VERSION

Вы также можете использовать эту команду для установки или обновления (Update-Package)

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