Создание нескольких файлов Nuspec

В настоящее время я пытаюсь опубликовать множество пакетов nuget для всех проектов в этом решении. Проекты настраиваются в виде простого дерева, где Myre является базовым проектом, и все, что от него зависит:

Myre <- Myre.Debugging <- Myre.Debugging.UI <- Myre.UI
Myre <- Myre.UI
Myre <- Myre.Entities <- Myre.Graphics

Я пытаюсь упаковать каждый отдельный проект как пакет nuget с правильными зависимостями от других пакетов подпроекта Myre по мере необходимости.

Моим первым шагом было создание пакета для Myre (nuspec и bat-файл процесса). Кажется, это работает нормально, в галерее показано, что Myre имеет зависимость ninject (другой пакет nuget), и все в порядке.

Проблема возникает, когда я пытался сделать следующий пакет. Myre.Debugging зависит от Myre (с обычной ссылкой на проект) и ничего больше. Используя этот nuspec с пакетом nuget ( многословный) дает:

Attempting to build package from '(x86) Myre.Debugging.csproj'.
Packing files from 'C:\Long_Path\Myre\Myre.Debugging\bin\x86\Release'.
Add file 'C:\Long_Path\Myre\Myre.Debugging\bin\x86\Release\Myre.Debugging.dll' to package as 'lib\net40-Client\Myre.Debugging.dll'
Add file 'C:\Long_Path\Myre\Myre\bin\x86\Release\Myre.dll' to package as 'lib\net40-Client\Myre.dll'
Add file 'C:\Long_Path\Myre\Myre\bin\x86\Release\Myre.XML' to package as 'lib\net40-Client\Myre.XML'
Found packages.config. Using packages listed as dependencies

Id: Myre.Debugging
Version: 1.0.0.2
Authors: Microsoft
Description: Description
Dependencies: Ninject (= 3.0.1.10)

Added file 'lib\net40-Client\Myre.Debugging.dll'.
Added file 'lib\net40-Client\Myre.dll'.
Added file 'lib\net40-Client\Myre.XML'.

Successfully created package 'C:\Long_Path\Myre\Myre.Debugging\Myre.Debugging.1.0.0.2.nupkg'.

Как вы можете видеть, он берет файл packages.config (предположительно из Myre, поскольку нет ни одного здесь), от которого затем определяется зависимость Ninject. Если бы я хотел, чтобы Myre.Debugging и Myre были единым пакетом, это было бы хорошо. Однако это не то, что я хочу, я хочу, чтобы Myre.Debugging определял зависимость от пакета Myre.

Как я могу настроить nuget для использования Myre в качестве ссылки на пакет, а не просто для копирования сборок Myre в пакет Myre.Debugging?

Изменить :: Я пытался не использовать -IncludeReferencedProjects и указывал:

<dependencies>
  <dependency id="Myre" version="1.0.0.1" />
</dependencies>

Но по какой-то причине это просто создает пакет без каких-либо зависимостей! Даже если указание зависимостей вручную, как эта, действительно сработало, это вряд ли идеально.


person Martin    schedule 19.11.2013    source источник
comment
Если кто-то заходит на мою страницу nuget и видит множество проектов Myre, это потому, что я создал все файлы nuspec вручную. Но это действительно не очень хорошее долгосрочное решение!   -  person Martin    schedule 19.11.2013


Ответы (1)


Согласно справочнику командной строки NuGet для команды Pack, IncludeReferencedProjects переключатель работает следующим образом:

Включите проекты, на которые есть ссылки, как зависимости или как часть пакета. Если у проекта, на который имеется ссылка, есть соответствующий файл nuspec, имя которого совпадает с именем проекта, то этот проект, на который имеется ссылка, добавляется как зависимость. В противном случае указанный проект добавляется как часть пакета.

В вашем случае Myre.Debugging.nuspec не соответствует именам файлов проекта: (x86) Myre.Debugging.csproj и т. д. Я подозреваю, что вам нужно сопоставить имена этих файлов, чтобы эта опция командной строки заработала.

В качестве альтернативы, если вы хотите, чтобы это работало с элементом <dependencies> в вашем файле nuspec, вы можете столкнуться с другим вариантом проблемы несоответствия имен. Ваш файл Myre.nuspec определяет свой идентификатор следующим образом:

<id>$id$</id>

В справочнике NuSpec говорится, что маркер $id$ заменен на «Имя сборки». Если речь идет об имени DLL (без учета расширения), то я думаю, что сгенерированные идентификаторы будут (x86) Myre и т. Д. Возможно, вы захотите временно жестко закодировать идентификатор, чтобы посмотреть, решит ли это проблему.

Я не пробовал вносить эти предлагаемые изменения и не могу гарантировать, что они сработают, но я надеюсь, что это укажет вам правильное направление. Удачи!

person Dan Jagnow    schedule 20.11.2013