Создайте пакет nuget для решения с несколькими проектами
В настоящее время мы строим решение с несколькими проектами.
У нас есть что-то вроде этого:
- Common
- Logging
- Logging.NLog
- Threading
Итак, Logging.NLog зависит от ведения журнала, входа в Common... и т.д.
Когда мы упаковываем Logging.NLog, я бы хотел, чтобы nuget обнаружил Loggin и Common dependecies.
На данный момент я создал пакет с Common, затем в Logging я установил пакет Common с
install-package Common
Но всякий раз, когда я делаю модификацию Common, мне приходится обновлять пакет, и они создаются нашей непрерывной системой интеграции (Hudson), поэтому это довольно раздражает, когда мы разрабатываем.
Я хотел бы просто иметь ссылку на проект (Добавить ссылки → Проект...), и nuget все равно обнаруживает зависимости.
Есть ли способ его достижения?
Ответы
Ответ 1
Существует запланированная функция, нацеленная на этот точный сценарий.
Вот как это будет выглядеть:
> nuget.exe pack proj.csproj -IncludeReferencedProjects
Он, по-видимому, был реализован несколько дней назад, но есть ошибки еще гладил out.
Функция, как она сейчас стоит, позволяет:
- упаковывать артефакты нескольких проектов в единый пакет nuget (рекурсивно рекурсивно перемещая ссылки проекта),
ИЛИ
- создание ссылок на пакеты nuget для этих проектов, связанных с пакетами, если связанные проекты содержат файлы .nuspec.
Запрос функции датируется вплоть до 1.5, но он продолжает скользить. В последнее время он собрал достаточно массы (запросов), которые планируются к выпуску в Nuget 2.3.
Планы релиза привязаны к версии 2.3 для "Конец апреля 2013 года", поэтому следите за обновлениями.
(В настоящее время последняя версия Nuget - 2.2.1).
Ответ 2
Я думаю, что Чарльз означает, что он хочет, чтобы NuGet автоматически разрешал ссылки на проекты в зависимости от пакетов, если упомянутые проекты, на которые ссылаются, также используются для создания пакетов NuGet, правильно?
Пример:
- Ведение журнала настроено для создания пакета NuGet.
- Logging.Nlog настроен для создания пакета NuGet.
- Logging.Nlog имеет ссылку на проект для ведения журнала.
- Сгенерированный пакет Logging.Nlog должен получить зависимость от сгенерированного пакета ведения журнала.
Это то, что я искал сам, но, к сожалению, я обнаружил, что в настоящее время он не поддерживается. На нем есть рабочий элемент, который запланирован для NuGet 1.7, но даже не существует способа управления этим процессом.
Ответ 3
В этой теме есть хорошее предложение: NuGet и несколько решений
В принципе, вырвите общие компоненты в свое решение, со своим собственным жизненным циклом выпуска.
Ответ 4
В настоящее время нет способа выполнить именно то, что вы просите, но следующее поможет вам оптимизировать ваши обновления.
Похоже, вам нужно добавить файлы nuspec в ваше решение. Что-то вроде следующих трех файлов. Обратите внимание на зависимости во втором. Они относятся к той же версии dll, что и обычная версия [$ version $]. Это означает, что при запуске следующей команды он обновляет все три, потому что квадратные скобки в зависимостях требуют определенной версии зависимых пакетов.
PM > общий пакет обновления
В Hudson вам нужно будет выполнить эти файлы 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>