Создать пакет nuget для решения с несколькими проектами - PullRequest
16 голосов
/ 02 сентября 2011

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

У нас есть что-то вроде этого:

- Common
  - Logging
     - Logging.NLog
- Threading

Таким образом, Logging.NLog зависит от ведения журнала, регистрации общего ... и т. Д.

Когда мы запаковываем Logging.NLog, я бы хотел, чтобы nuget обнаружил зависимости Loggin и Common.

На данный момент я создал пакет с Common, затем в Logging установил пакет Common с

install-package Common

Но всякий раз, когда я делаю модификацию Common, мне приходится обновлять пакет, и он создается нашей системой непрерывной интеграции (Hudson), поэтому, когда мы разрабатываем, это довольно раздражает.

Я хотел бы просто иметь ссылку на проект (Добавить ссылки -> Проект ...), и в любом случае Nuget обнаружит зависимости.

Есть ли способ достичь этого?

Ответы [ 4 ]

14 голосов
/ 15 марта 2013

Существует запланированная функция , предназначенная для этого точного сценария.

Вот как это будет выглядеть:

> nuget.exe pack proj.csproj -IncludeReferencedProjects

По-видимому, реализовано просто дней назад, но есть ошибок все еще , являющихся выглаженный out .

Эта функция в ее нынешнем виде позволяет:

  • упаковывать артефакты нескольких проектов в единый пакет nuget(при ходьбе проект рекурсивно ссылается),

ИЛИ

  • создание пакета nuget ссылки на связанные пакеты этих проектов, еслиу упомянутых проектов есть сопровождающие файлы .nuspec.

Запрос функции относится ко времени 1,5, но он продолжал проскальзывать.Однако в последнее время он собрал достаточно массы (запросов), чтобы запланировать выпуск в Nuget 2.3 .

План выпуска привязан к версии 2.3 для «Конец апреля 2013 года», так что следите за обновлениями.
(В настоящее время последняя версия Nuget - 2.2.1).

3 голосов
/ 26 июня 2012

В настоящее время нет способа сделать именно то, что вы просите, но следующее поможет вам упростить ваши обновления.

Похоже, вам нужно добавить файлы nuspec в ваше решение.Что-то вроде следующих трех файлов.Обратите внимание на зависимости во вторых двух.Они ссылаются на ту же версию dll, что и обычную через [$ version $].Это означает, что когда вы запускаете следующую команду, она обновляет все три, потому что квадратные скобки на зависимостях требуют конкретной версии зависимых пакетов.

PM> update-package common

В Гудзоневам нужно будет выполнить эти файлы nuspec с помощью команды nuget pack ( см. справочник по командам Nuget ) и включить полученные пакеты в ваши артефакты, а также развернуть их на локальном сервере nuget.Я оставлю это вам.

Другая вещь, которую вам нужно сделать, - убедиться, что все ваши сборки получают одинаковую версию для одной и той же сборки.Опять же, Хадсон может позаботиться об этом, или вы можете использовать общий файл AssemblyInfo.

Common.nuspec

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
    <version>$version$</version>
    <authors>Charles Ouellet</authors>
    <owners />
    <iconUrl>http://domain/Content/images/LOGO_32x32.png</iconUrl>
    <id>Common</id>
    <title>Common</title>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>full description here</description>
</metadata>
<files>
    <file src="..\Common\bin\Release\Common.dll" target="lib\net40" />
    <file src="..\Common\bin\Release\Common.pdb" target="lib\net40" />
</files>
</package>

Logging.nuspec

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
    <version>$version$</version>
    <authors>Charles Ouellet</authors>
    <owners />
    <iconUrl>http://domain/Content/images/LOGO_32x32.png</iconUrl>
    <id>Logging</id>
    <title>Logging</title>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>full description here</description>
    <dependencies>
        <dependency id="Common" version="[$version$]" />
    </dependencies>        
</metadata>
<files>
    <file src="..\Logging\bin\Release\Logging.dll" target="lib\net40" />
    <file src="..\Logging\bin\Release\Logging.pdb" target="lib\net40" />
</files>
</package>

Logging.NLog

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
    <version>$version$</version>
    <authors>Charles Ouellet</authors>
    <owners />
    <iconUrl>http://domain/Content/images/LOGO_32x32.png</iconUrl>
    <id>Logging.NLog</id>
    <title>Logging.NLog</title>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>full description here</description>
    <dependencies>
        <dependency id="Logging" version="[$version$]" />
    </dependencies>        
</metadata>
<files>
    <file src="..\Logging.NLog\bin\Release\Logging.NLog.dll" target="lib\net40" />
    <file src="..\Logging.NLog\bin\Release\Logging.NLog.pdb" target="lib\net40" />
</files>
</package>
1 голос
/ 16 мая 2012

У этой ветки есть хорошее предложение: NuGet и несколько решений

По сути, выделите общие компоненты для своего собственного решения с собственным жизненным циклом выпуска.

1 голос
/ 11 октября 2011

Я думаю, что Чарльз хочет, чтобы NuGet автоматически разрешал ссылки на проекты в зависимости от пакетов, если указанные ссылочные проекты также используются для создания пакетов NuGet, верно?

Пример:

  1. Ведение журнала настроено для генерации пакета NuGet
  2. Logging.Nlog настроен для генерации пакета NuGet
  3. Logging.Nlog содержит ссылку на проект для ведения журнала.
  4. Сгенерированный пакет Logging.Nlog должен получить зависимость от сгенерированного пакета Logging.

Это то, что я тоже искал, но, к сожалению, я обнаружил, что в настоящее время это не поддерживается. На нем есть рабочий элемент , запланированный для NuGet 1.7, но пока еще не разработан способ его обработки.

...