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

Допустим, у меня есть проект с такой структурой:

MyLibrary\
  MyLibrary.sln
  MyLibrary.Core\
    MyLibrary.Core.csproj
  MyLibrary.Extensions\
    MyLibrary.Extensions.csproj
  MyLibrary.Tests\
    MyLibrary.Tests.csproj

Я хочу создать один пакет NuGet, который будет упаковывать MyLibrary.Core.dll и MyLibrary.Extensions.dll.Я не могу понять, как заставить NuGet сделать это.Я попытался создать файл спецификации вручную, и я попытался создать его, используя «nuget spec MyLibrary.Core.csproj».Я попытался добавить все библиотеки DLL в папку lib /, которая, как я понимаю, является основанным на соглашении механизмом добавления библиотек DLL в пакет.В каждом случае я могу получить MyLibary.Core.dll, чтобы попасть в пакет, но MyLibrary.Extensions.dll не будет упакован вместе с ним.

TLDR: Какова лучшая практика для создания NuGet?пакет с несколькими проектами / сборками?Есть ли учебник, который фокусируется на этом?Все учебники, которые я нашел, фокусируются на простых однопроектных демонстрациях.

Ответы [ 7 ]

40 голосов
/ 20 августа 2012

Вы будете запускать NuGet для одного проекта (или файла nuspec), но он поддерживает указатели на другие проекты через элемент file .Этот элемент использует имена References вашего проекта, поэтому вам не придется а) находить местоположение других файлов проекта и б) копировать файлы в определенное место в качестве шага после сборки.

Предположим, у вас есть файл nuspec для MyLibrary.Core.csproj , и он ссылается на MyLibrary.Extensions и MyLibrary.Tests , так что они заканчиваются вкаталог bin после сборки:

<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
  <metadata>
    ...
  </metadata>
  <files>
    <file src="bin\Release\MyLibrary.Extensions.dll" target="lib\net40" />
    <file src="bin\Release\MyLibrary.Tests.dll" target="lib\net40" />
  </files>
</package>

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

21 голосов
/ 26 сентября 2011

Создали ли вы пустой файл nuspec с:

nuget spec

Если вы используете этот файл и затем поместите ваши dll в папку с именем lib, он упакует их.

У меня были небольшие проблемы с попыткой создать файл nuspec из проекта или DLL. Кроме того, если вы вручную ссылаетесь на какие-либо файлы в файле nuspec, соглашения не используются. Это, вероятно, проблема с nuspecs, сгенерированными из библиотек или проектов.

Также, если вы пытаетесьчтобы запустить это из сценария сборки, который выполняется в другой папке, вы можете указать nuget местоположение вашей папки. \ lib с помощью командной строки -BasePath:

build\nuget.exe pack nuget\Company.Project.nuspec -BasePath nuget\
3 голосов
/ 26 сентября 2011

Вы пробовали NuGet Package Explorer?Может быть самый простой способ:

http://nuget.codeplex.com/releases/view/59864

1 голос
/ 16 февраля 2017

У меня есть некоторый учебник, как я сделал это с Windows и Visual Studio:

создайте локальную папку и назовите ее пакетами, такими как: c: / packages // lib - важно создать другую папку в папке, назовите ее libи мимо него dll.

открыть проводник пакета nuget - https://npe.codeplex.com/downloads/get/clickOnce/NuGetPackageExplorer.application

интерфейс очень интуитивно понятен, просто добавьте dll и экспортируйте его в / lib (для учебника https://blog.zwezdin.com/2014/building-nuget-packages-with-gui-tool/ на русском языке)но посмотрите на изображениях поток, это около 3 кликов)

он создаст файл nuspec

открыть GIT BASH - https://git -for-windows.github.io / и перейдите к: cd c: => пакетам cd (путь)

*, возможно, в Windows вам нужно будет предоставить опции разработчика для вещей Linux для Windows (https://www.howtogeek.com/249966/how-to-install-and-use-the-linux-bash-shell-on-windows-10/)

в GIT BASH введитекоманда: nuget add -source [опции]

где:: полное имя nuspec (включая .nuspec)

и: путь к папке lib в папке (c: / packages //lib)

после успешного завершения действия

в GIT BASH введите другую команду:

пакет nuget .nuspec

нет в этой папке у вас есть файл .nupkg.

Как установить файл .nupkg пакета Nuget локально? - учебное пособие какдобавить его в visual studio.

1 голос
/ 06 августа 2014

Я недавно опубликовал решение для этого ...

Мое решение позволяет автоматически создавать пакеты NuGet при создании решения, в котором каждый пакет может содержать несколько сборок, ссылки как на внешние NuGets, так и на NuGets, созданные во время одной сборки, и даже включать исходный код для отладки.

В вашем случае все, что вам нужно сделать, это добавить новый проект библиотеки классов в ваше решение, сослаться на проекты, которые вы хотите упаковать, а затем добавить событие после сборки.

Вы можете найти статью с кратким руководством здесь и исходный код + двоичный код здесь .

1 голос
/ 27 октября 2013

Кажется, ваша проблема такая же, как и этот вопрос: Почему Nuget не включает указанный проект при упаковке? . Если это так, вы можете использовать опцию -includereferencedprojects (см. http://docs.nuget.org/docs/reference/command-line-reference#Pack_Command).

0 голосов
/ 29 января 2018

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

Пакет развернут на сайте Nuget.org . После ссылки на него в проекте Вам необходимо добавить файл nuspeck в проекты, которые должны генерировать проекты.

Проект с требуемым файлом nuspeck

Последнее, что вы должны сделать, это вызвать команду Create-Nuspec в диспетчере пакетов. После того, как модуль powershell возьмет все библиотеки, которые являются результатом сборки, он также добавит необходимые зависимости и создаст nuget в выходном каталоге.

Описание об этом пакете размещено здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...