Erstellen eines NuGet-Pakets mit der dotnet CLI
NuGet-Pakete enthalten Code, den Entwickler in ihren Projekten wiederverwenden können. Unabhängig davon, was Ihr Code tut oder enthält, verwenden Sie ein Befehlszeilentool, entweder nuget.exe
oder dotnet.exe
, um das NuGet-Paket zu erstellen.
In diesem Artikel wird das Erstellen eines Pakets mithilfe der dotnet CLI beschrieben. Ab Visual Studio 2017 ist die dotnet CLI in allen NET- und .NET Core-Workloads enthalten. Wenn Sie die dotnet CLI oder andere NuGet-Clienttools installieren müssen, lesen Sie "nstallieren von NuGet-Client-Tools.
Dieses Thema gilt nur für .NET und andere Projekte, die das SDK-Format verwenden. Für diese Projekte verwendet NuGet Informationen aus der Projektdatei, um ein Paket zu erstellen. Schnellstarter-Tutorials finden Sie unter Erstellen von Paketen mit dotnet CLI oder Erstellen von Paketen mit Visual Studio.
Der MsBuild Befehl msbuild -t:pack entspricht funktionell dem Dotnet-Paket. Weitere Informationen zum Erstellen eines NuGet-Pakets mit MSBuild finden Sie unter Erstellen eines NuGet-Pakets mithilfe von MSBuild.
Hinweis
Informationen zum Erstellen und Veröffentlichen von Paketen für Nicht-SDK-Projekte, in der Regel .NET Framework-Projekte, finden Sie unter Erstellen eines Pakets mithilfe der nuget.exe CLI oder Erstellen und Veröffentlichen eines Pakets mit Visual Studio (.NET Framework).
Für Projekte, die von packages.config zu PackageReference migriert wurden, verwenden Sie
msbuild -t:pack
. Weitere Informationen finden Sie unter Erstellen eines Pakets nach der Migration.
Eigenschaften festlegen
Sie können ein Beispielprojekt für eine Klassenbibliothek mithilfe des Befehls dotnet new classlib
erstellen und das Projekt mithilfe von dotnet pack
verpacken. Der Befehl dotnet pack
verwendet die folgenden Eigenschaften. Wenn Sie keine Werte in der Projektdatei angeben, verwendet der Befehl Standardwerte.
PackageId
, der Paketbezeichner muss für nuget.org und alle anderen Ziele eindeutig sein, die das Paket hosten. Wenn Sie keinen Wert angeben, verwendet der BefehlAssemblyName
.Version
ist eine bestimmte Versionsnummer in der FormMajor.Minor.Patch[-Suffix]
, wobei-Suffix
die Vorabversionen identifiziert werden. Wenn Sie hier nichts angeben, lautet der Standardwert1.0.0
.Authors
sind die Ersteller des Pakets. Wenn nichts angeben wird, lautet der StandardwertAssemblyName
.Company
sind Unternehmensdaten Wenn der Wert nicht angegeben ist, lautet der StandardwertAuthors
.Product
sind Produktinformationen Wenn nichts angeben wird, lautet der StandardwertAssemblyName
.
In Visual Studio können Sie diese Werte in den Projekteigenschaften festlegen. Klicken Sie im Lösungs-Explorer mit der rechten Maustaste auf das Projekt, wählen Sie Eigenschaften und dann den Abschnitt Paket aus. Sie können die Eigenschaften auch direkt in .csproj oder einer anderen Projektdatei festlegen.
Das folgende Beispiel zeigt eine Projektdatei mit hinzugefügten Paketeigenschaften.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<PackageId>UniqueID</PackageId>
<Version>1.0.0</Version>
<Authors>Author Name</Authors>
<Company>Company Name</Company>
<Product>Product Name</Product>
</PropertyGroup>
</Project>
Sie können weitere optionale Eigenschaften hinzufügen, z. B. Title
, PackageDescription
und PackageTags
.
Hinweis
Bei Paketen, die Sie für den öffentlichen Verbrauch erstellen, achten Sie besonders auf die Eigenschaft PackageTags
. Tags helfen anderen, Ihr Paket zu finden und zu verstehen, was es tut.
Der Befehl dotnet pack
konvertiert PackageReference
s in Ihren Projektdateien automatisch in Abhängigkeiten im erstellten Paket. Sie können steuern, welche Ressourcen über die Tags IncludeAssets
, ExcludeAssets
und PrivateAssets
eingeschlossen werden sollen. Weitere Informationen finden Sie unter Steuern von Abhängigkeitsobjekten.
Weitere Informationen zu Abhängigkeiten, optionalen Eigenschaften und Versionsverwaltung finden Sie unter:
- Paketverweise in Projektdateien
- Paketversionsverwaltung
- NuGet-Metadaten-Eigenschaften
- MSBuild-Paket-Ziele
Auswählen eines eindeutigen Paketbezeichners und Festlegen der Versionsnummer
Der Paketbezeichner und die Versionsnummer bezeichnen eindeutig den exakten Code, der im Paket enthalten ist.
Befolgen Sie die folgenden bewährten Methoden zum Erstellen des Paketbezeichners:
Der Bezeichner muss für nuget.org und alle anderen Speicherorte, die das Paket hosten, eindeutig sein. Zur Vermeidung von Konflikten empfiehlt es sich, den Namen Ihres Unternehmens im ersten Teil des Bezeichners zu nutzen.
Folgen Sie einer .NET-Namespace-ähnlichen Benennungskonvention mit Punktnotation. Schreiben Sie z.B.
Contoso.Utility.UsefulStuff
stattContoso-Utility-UsefulStuff
oderContoso_Utility_UsefulStuff
. Es ist auch für Verbraucher hilfreich, wenn Sie den Paketbezeichner mit dem Namespace abgleichen, den der Code verwendet.Wenn Sie ein Paket mit Beispielcode erstellen, das veranschaulicht, wie ein anderes Paket verwendet wird, fügen Sie
.Sample
als Suffix an den Bezeichner an, wie inContoso.Utility.UsefulStuff.Sample
.Das Beispielpaket hat eine Abhängigkeit vom ursprünglichen Paket. Fügen Sie beim Erstellen des Beispielpakets
<IncludeAssets>
mit dem WertcontentFiles
hinzu. Ordnen Sie im Inhaltsordner den Beispielcode in einem Ordner namens \Samples\<identifier> an, z. B. \Samples\Contoso.Utility.UsefulStuff.Sample.
Befolgen Sie die folgenden bewährten Methoden zum Festlegen der Paketversion:
Im Allgemeinen sollten Sie die Paketversion so einstellen, dass sie mit der Projekt- oder Assembly-Version übereinstimmt, obwohl dies nicht zwingend erforderlich ist. Die Anpassung der Version ist einfach, wenn Sie ein Paket auf eine einzige Baugruppe beschränken. NuGet selbst richtet sich beim Auflösen der Abhängigkeiten nach den Paketversionen, nicht nach den Assemblyversionen.
Wenn Sie ein nicht standardmäßiges Versionsschema verwenden, müssen Sie die NuGet-Versionsregeln wie unter Paketversionsverwaltung beschrieben anwenden. NuGet ist größtenteils Semantic Versioning 2.0.0-kompatibel.
Hinweis
Weitere Informationen zur Abhängigkeitsauflösung finden Sie unter Abhängigkeitsauflösung mit PackageReference. Informationen, die möglicherweise hilfreich sein können, um die Versionierung besser zu verstehen, finden Sie in dieser Reihe von Blog-Einträgen.
Hinzufügen eines optionalen Beschreibungsfelds
Die optionale Beschreibung des Pakets wird auf der Registerkarte README der nuget.org Seite des Pakets angezeigt. Die Beschreibung wird aus <Description>
in der Projektdatei oder $description
in der .nuspec-Datei abgerufen.
Das folgende Beispiel zeigt eine Description
in der .csproj-Datei für ein .NET-Paket:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<PackageId>Azure.Storage.Blobs</PackageId>
<Version>12.4.0</Version>
<PackageTags>Microsoft Azure Storage Blobs;Microsoft;Azure;Blobs;Blob;Storage;StorageScalable</PackageTags>
<Description>
This client library enables working with the Microsoft Azure Storage Blob service for storing binary and text data.
For this release see notes - https://github.com/Azure/azure-sdk-for-net/blob/master/sdk/storage/Azure.Storage.Blobs/README.md and https://github.com/Azure/azure-sdk-for-net/blob/master/sdk/storage/Azure.Storage.Blobs/CHANGELOG.md
in addition to the breaking changes https://github.com/Azure/azure-sdk-for-net/blob/master/sdk/storage/Azure.Storage.Blobs/BreakingChanges.txt
Microsoft Azure Storage quickstarts and tutorials - https://video2.skills-academy.com/azure/storage/
Microsoft Azure Storage REST API Reference - https://video2.skills-academy.com/rest/api/storageservices/
REST API Reference for Blob Service - https://video2.skills-academy.com/rest/api/storageservices/blob-service-rest-api
</Description>
</PropertyGroup>
</Project>
Ausführen des Befehls pack
Um das NuGet-Paket oder die .nupkg-Datei zu erstellen, führen Sie den Befehl dotnet pack aus dem Projektordner aus, wodurch das Projekt ebenfalls automatisch erstellt wird.
dotnet pack
Die Ausgabe zeigt den Pfad zur .nupkg-Datei.
MSBuild version 17.3.0+92e077650 for .NET
Determining projects to restore...
Restored D:\proj\AppLoggerNet\AppLogger\AppLogger.csproj (in 97 ms).
Successfully created package 'D:\proj\AppLoggerNet\AppLogger\bin\Debug\AppLogger.1.0.0.nupkg'.
Automatisches Generieren des Pakets bei der Erstellung
Um dotnet pack
automatisch auszuführen, wenn Sie dotnet build
ausführen, fügen Sie folgende Zeile zu Ihrer Projektdatei im Tag <PropertyGroup>
hinzu:
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
Hinweis
Wenn Sie das Paket automatisch generieren, erhöht das Verpacken die Erstellungszeit für Ihr Projekt.
Wenn Sie dotnet pack
für eine Löösung ausführen, werden alle Projekte in der Lösung verpackt, die verpackt werden können, das heißt, die Eigenschaft IsPackable
wird auf true
festgelegt.
Testen der Paketinstallation
Bevor Sie ein Paket veröffentlichen, sollten Sie die Installation des Pakets in einem Projekt testen. Durch das Testen wird sichergestellt, dass die erforderlichen Dateien an den richtigen Stellen im Projekt landen.
Testen Sie die Installation manuell in Visual Studio oder mithilfe der normalen Paketinstallationsschritte über die Befehlszeile.
Wichtig
Sie können die Pakete nach der Erstellung nicht mehr ändern. Wenn Sie ein Problem beheben, ändern Sie den Paketinhalt, und packen Sie es erneut.
Nachdem Sie das Paket neu erstellt haben, verwendet die erneute Überprüfung weiterhin die alte Version des Pakets, bis Sie den Ordner globale Pakete löschen. Das Löschen des Ordners ist besonders wichtig für Pakete, die für jeden Build keine eindeutige Vorabversionsbezeichnung verwenden.
Nächste Schritte
Nachdem Sie das Paket erstellt haben, können Sie die nupkg-Datei auf dem Host Ihrer Wahl veröffentlichen.
In den folgenden Artikeln finden Sie Möglichkeiten zum Erweitern der Funktionen Ihres Pakets oder zur Unterstützung anderer Szenarien:
- Paketversionsverwaltung
- Unterstützen mehrerer Zielframeworks
- Hinzufügen eines Paketsymbols
- Transformationen von Quell- und Konfigurationsdateien
- Lokalisierung
- Vorabversionen
- Festlegen des Pakettyps
- MSBuild-Eigenschaften und -Ziele
- Erstellen von Paketen mit COM-Interop-Assemblys
- Erstellen nativer Pakete
- Erstellen von Symbolpaketen (.snupkg)