Создание одного пакета NuGet из нескольких проектов в одном решении
У меня есть решение, над которым я работаю, содержащий 4 проекта библиотеки классов (A
, B
, C
, D
). A
и B
можно считать проектами верхнего уровня в решении. И A
, и B
ссылка C
, а D
стоит отдельно.
Эти четыре проекта представляют собой группу служб, которые я создал для обработки автоматизированного рабочего процесса. Все они тесно связаны друг с другом и будут использоваться только в одном месте (менеджер услуг), поэтому я не хочу разбить их на разные решения.
Моя проблема в том, что я хочу создать единый пакет NuGet, который будет содержать все 4 библиотеки, без необходимости создавать их все и собирать свои DLL вручную. Я знаю, что я мог бы технически достичь этого, указав A
или B
ссылки на оставшиеся проекты, но это не настоящие отношения, и я чувствую, что этого следует избегать.
Я много искал эту проблему, и я не могу найти решение, кроме как вручную собирать библиотеки DLL и самостоятельно создавать пакет. Есть ли способ достичь результата, который я хочу использовать функции/способности NuGet?
ПРИМЕЧАНИЕ. Если теги не очищаются, я в настоящее время использую VS2010 с сервером сборки TeamCity. В случае, если это актуально, я также использую Git через сервер Stash.
EDIT. Я просто понял, что это может быть достаточно важным, чтобы упомянуть. Эти проекты ссылаются на другие пакеты NuGet, которые мне нужно будет отмечать как зависимости.
Ответы
Ответ 1
Вы должны определить свой собственный манифест nuspec. Вы можете просмотреть список сборок в разделе files
:
<file src="A\bin\Release\A.dll" target="lib\net40" />
<file src="B\bin\Release\B.dll" target="lib\net40" />
...
Подробнее читайте ссылку NuSpec.
Затем укажите, что nuspec файл в NuPack строит шаг вместо proj.
Ответ 2
Если вы загрузили NuGet.exe
Вы можете запустить: nuget pack Myproject.csproj -IncludeReferencedProjects, и это должно включать все ваши проекты. Здесь примечание от NuGet docs:
Если проект ссылается на другие проекты, вы можете добавить связанные проекты как часть пакета или в зависимости от опции -IncludeReferencedProjects. Это делается рекурсивно. Например, предположим, что у вас есть проект A.csproj, который ссылается на B.csproj и C.csproj, а B.csproj ссылается на D.csproj и E.csproj, C.csproj ссылается на F.csproj и G.csproj. Затем, когда вы запустите:
пакет nuget A.csproj -IncludeReferencedProjects
сгенерированный пакет будет содержать файлы из проектов B, C, D, E, F и G в дополнение к файлам из проекта A.
Если ссылочный проект имеет соответствующий файл nuspec с тем же именем, тогда этот ссылочный проект вместо этого добавляется как зависимость. Используя тот же пример, предположим, что теперь есть файл C.nuspec в том же каталоге, что и файл проекта C.csproj. При запуске:
пакет nuget A.csproj -IncludeReferencedProjects
сгенерированный пакет будет содержать файлы из проектов B, D, E, в дополнение к файлам из проекта A, а пакет имеет зависимость от C.
Также см. Ссылка в командной строке
Ответ 3
это, вероятно, решит это точно:
nuget.exe pack proj.csproj -IncludeReferencedProjects
вы можете видеть:
Создайте пакет nuget для решения с несколькими проектами