NuGet для решений с несколькими проектами

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

  • Core
  • интерфейс
  • Испытания

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

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

  • Должен ли я использовать ссылку "Добавить библиотечный пакет" для всех трех проектов в любое время, когда мне нужна ссылка?
  • Должен ли я использовать "Добавить ссылку на библиотечный пакет" в первый раз, когда мне нужен пакет, а затем использовать Add Reference- > Browse для последующего использования?

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

Ответ 1

Для кого-то, спотыкающегося об этом, теперь есть следующий вариант:

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

... Или:

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

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

Ответ 2

Используйте консоль для таргетинга нескольких проектов

Tools > Library Package Manager > Package Manager Console

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

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

например

Get-Project Core,UI | Install-Package FluentDateTime

Ответ 3

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

PM> Get-Project -all | where {$_.Name -match "Songhay.Silverlight" -and
    $_.Name -notmatch "ApplicationLoader" -and $_.Name -notmatch ".Xml"}
    | ForEach-Object {Install-Package MvvmLight -project $_.Name}

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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

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)