Две библиотеки DLL csproj, один пакет NuGet. Как это сделать?

Я работаю над проектом в Visual Studio, который разделен на три разных проекта:

  1. Acme.Веб-приложение
  2. Acme.Домен
  3. Acme.SDK

WebApplication использует проект Domain, в котором хранятся его классы сущностей и некоторые другие «основные» объекты и интерфейсы.

Проект SDK — это то, что мы предоставляем сторонним пользователям. Он делает вызовы API к нашему проекту WebApplication. Проект SDK также использует проект Acme.Domain.

Теперь вот проблема.

Мы создаем пакет NuGet для нашего Acme.SDK. Но поскольку Acme.SDK также использует проект Acme.Domain, нам также необходимо упаковать его как пакет NuGet.

Я хотел бы иметь только один пакет NuGet и по-прежнему иметь возможность ссылаться на оба класса из Acme.SDK и Acme.Domain из этого одного пакета NuGet вместо двух свободных пакетов NuGet.

Это возможно? И так, как я могу это сделать?


person Vivendi    schedule 21.05.2015    source источник


Ответы (1)


Да. Как вы знаете, NuGet может создать пакет непосредственно из файла .csproj. Это в основном «автоматический» режим. Это просто, но также имеет ограничения.

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

Сначала создайте папку с именем nuspec в корне вашего решения.

Откройте командную строку в папке nuspec.

Введите: nuget spec MyPackage ‹= используйте любой идентификатор вашего пакета

Будет создан файл MyPackage.nuspec. Отредактируйте этот файл. Там вы увидите кучу стандартного кода. Обновите значения соответствующим образом.

ПРИМЕЧАНИЕ. Как только вы начнете использовать явный файл .nuspec, вам придется сохранить эти значения (например, номер версии), поскольку они больше не будут извлекаться из файла .csproj.

Основная часть, которую вам нужно добавить, — это раздел <files/>. Также убедитесь, что вы включили зависимости, необходимые для ОБОИХ ваших проектов.

Вот пример файла .nuspec:

<?xml version="1.0"?>
<package >
  <metadata>
    <id>MyPackage</id>
    <version>1.0.0</version>
    <authors>Author Names</authors>
    <owners>Owner Names</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>MyPackage description</description>
    <releaseNotes>Initial version.</releaseNotes>
    <copyright>Copyright 2015</copyright>

<!-- add dependencies here  
    <dependencies>
        <dependency id="SomePackage.Id" />
    </dependencies>
-->

  </metadata>
  <files>
    <file src="..\ProjectA\bin\Debug\ProjectA.dll" target="lib\net45" />
    <file src="..\ProjectB\bin\Debug\ProjectB.dll" target="lib\net45" />
  </files>
</package>

Обратите внимание, как раздел файлов ссылается на фактические сборки, которые вы хотите включить в свой пакет.

После редактирования файла .nuspec необходимо создать пакет.

В командной строке введите: nuget pack MyPackage.nuspec

Затем он должен создать файл MyPackage.1.0.0.nupkg, готовый для загрузки на NuGet.org.

Вот документация для формата Nuspec: http://docs.nuget.org/Create/Nuspec-Reference

person Kiliman    schedule 21.05.2015