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

Работя върху проект във Visual Studio, който е разделен на три различни проекта:

  1. Acme.Webapplication
  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