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

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

  • ядро
  • UI
  • тесты

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

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

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

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

6 ответов

Решение

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

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

... Или же:

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

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

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

Tools > Library Package Manager > Package Manager Console

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

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

например

Get-Project Core,UI | Install-Package FluentDateTime

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

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

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

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

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

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

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

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)

Другие вопросы по тегам