Schnellstart: Erstellen und Veröffentlichen eines NuGet-Pakets mithilfe von Visual Studio (nur Windows)

Mit Microsoft Visual Studio können Sie ein NuGet-Paket aus einer .NET-Klassenbibliothek erstellen und dann mit dem CLI-Tool auf nuget.org veröffentlichen.

Die Schnellstartanleitung ist nur für Windows-Benutzer vorgesehen. Wenn Sie Visual Studio für Mac verwenden, lesen Sie Erstellen eines NuGet-Pakets aus vorhandenen Bibliotheksprojekten oder verwenden Sie die .NET CLI.

Voraussetzungen

  • Installieren Sie Visual Studio 2022 für Windows mit einer .NET Core-bezogenen Workload.

    Sie können die 2022 Community-Edition kostenlos von visualstudio.com installieren oder die Professional oder Enterprise Edition verwenden.

    Visual Studio 2017 und höher enthält automatisch NuGet-Funktionen, wenn Sie einen .NET-bezogenen Workload installieren.

  • Installieren Sie die .NET CLI, falls sie noch nicht installiert ist.

    Für Visual Studio 2017 und höher wird die .NET CLI automatisch mit allen .NET Core-bezogenen Arbeitslasten installiert. Installieren Sie andernfalls das .NET Core SDK, um die .NET CLI zu erhalten. Die NET CLI ist für .NET-Projekte erforderlich, die das SDK-Format (SDK-Attribut) verwenden. Die Standardvorlage der .NET-Klassenbibliothek in Visual Studio 2017 und höher verwendet das SDK-Attribut.

    Wichtig

    Wenn Sie mit einem Projekt im Nicht-SDK-Format arbeiten, befolgen Sie die Anweisungen unter Erstellen und Veröffentlichen eines .NET Framework-Pakets (Visual Studio), um das Paket stattdessen zu erstellen und zu veröffentlichen. In diesem Artikel wird die .NET CLI empfohlen. Sie können zwar mit der NuGet CLI jedes NuGet-Paket veröffentlichen, jedoch gelten einige der Schritte in diesem Artikel speziell für Projekte im SDK-Format und die .NET CLI. Die NuGet CLI wird für Projekte im Nicht-SDK-Format (in der Regel .NET Framework) verwendet.

  • Registrieren Sie sich für ein kostenloses Konto auf nuget.org, falls Sie noch kein Konto haben. Sie müssen sich registrieren und das Konto bestätigen, bevor Sie ein Paket hochladen können.

  • Installieren Sie die NuGet–CLI, indem Sie sie von nuget.org herunterladen, die Datei nuget.exe in einen geeigneten Ordner speichern und den Ordner der Umgebungsvariable PATH hinzufügen.

Erstellen eines Klassenbibliotheksprojekts

Sie können ein vorhandenes Projekt in der .NET-Klassenbibliothek für Code verwenden, den Sie packen wollen, oder ein Projekt wie folgt erstellen:

  1. Klicken Sie in Visual Studio auf Datei>Neu>Projekt.

  2. Wählen Sie im Fenster Neues Projekt erstellen in den Dropdownlisten C#, Windows und Bibliothek aus.

  3. Wählen Sie in der resultierenden Liste der Projektvorlagen Klassenbibliothek (mit der Beschreibung, ein Projekt zum Erstellen einer Klassenbibliothek für .NET oder .NET Standard) aus, und wählen Sie dann Weiter aus.

  4. Geben Sie im Fenster Neues Projekt konfigurierenAppLogger als Projektnamen ein, und klicken Sie auf Weiter.

  5. Wählen Sie im Fenster Zusatzinformationen ein geeignetes Framework aus, und wählen Sie dann Erstellen.

    Wenn Sie nicht sicher sind, welches Framework Sie auswählen möchten, ist die neueste Option eine gute Wahl und kann später problemlos geändert werden. Informationen darüber, welches Framework zu verwenden ist, finden Sie unter Wann sollten Sie .NET 5.0 oder .NET 6.0 im Vergleich zu .NET Standard einsetzen?.

  6. Um sicherzustellen, dass das Projekt ordnungsgemäß erstellt wurde, wählen Sie Build>Build-Lösungaus. Die DLL befindet sich im Ordner „Debuggen“ (oder im Ordner „Release“, wenn Sie stattdessen diese Konfiguration erstellen).

  7. (Optional) Für diese Schnellstartanleitung müssen Sie keinen zusätzlichen Code für das NuGet-Paket schreiben, da die Vorlagenklassenbibliothek zum Erstellen eines Pakets ausreicht. Wenn Sie noch immer Funktionscode für das Paket benötigen, verwenden Sie folgenden Code:

    namespace AppLogger
    {
        public class Logger
        {
            public void Log(string text)
            {
                Console.WriteLine(text);
            }
        }
    }
    

Konfigurieren von Paketeigenschaften

Nachdem Sie Ihr Projekt erstellt haben, können Sie die NuGet-Paketeigenschaften konfigurieren, indem Sie die folgenden Schritte ausführen:

  1. Wählen Sie ihr Projekt in Lösungs-Explorer aus, und wählen Sie dann Projektnameneigenschaften><> aus, wobei der <Projektname> der Name des Projekts ist.

  2. Erweitern Sie den Knoten Paket, und wählen Sie dann Allgemein aus.

    Der Knoten Paket wird nur für SDK-Projekte in Visual Studio angezeigt. Wenn Sie auf ein Projekt im Nicht-SDK-Stil abzielen (in der Regel .NET Framework), migrieren Sie das Projekt, oder lesen Sie das Erstellen und Veröffentlichen eines .NET Framework-Pakets für schrittweise Anleitungen.

    Screenshot showing NuGet package properties in a Visual Studio project.

  3. Bei Paketen für die öffentliche Nutzung sollten Sie besonders auf die Tags-Eigenschaft achten, da Tags anderen dabei helfen, Ihr Paket zu finden und dessen Funktion zu verstehen.

  4. Geben Sie Ihrem Paket eine eindeutige Paket-ID, und füllen Sie alle anderen gewünschten Eigenschaften aus. Eine Tabelle, die zeigt, wie MSBuild-Eigenschaften (SDK-ähnliche Projekte) den Eigenschaften der .nuspec-Datei entsprechen, finden Sie unter Packziele. Eine Beschreibung der Eigenschaften der .nuspec-Datei finden Sie in der .nuspec-Dateireferenz. Alle diese Eigenschaften werden in das .nuspec-Manifest eingefügt, dass von Visual Studio für das Projekt erstellt wird.

    Wichtig

    Sie müssen dem Paket einen Bezeichner zuweisen, der auf nuget.org bzw. auf dem Host, den Sie verwenden, einzigartig ist. Andernfalls tritt ein Fehler auf. Für diese Schnellstartanleitung wird empfohlen, Beispiel oder Test in den Namen zu einschließen, da der Veröffentlichungsschritt das Paket öffentlich sichtbar macht.

  5. (Optional) Um die Eigenschaften direkt in der Projektdatei AppLogger.csproj anzuzeigen, wählen Sie Projekt>bearbeiten aus.

    Die Registerkarte AppLogger.csproj wird geladen.

    Diese Option ist ab Visual Studio 2017 für Projekte verfügbar, die das SDK-Attribut verwenden. Für frühere Visual Studio-Versionen müssen Sie Projekt> entladen auswählen, bevor Sie die Projektdatei bearbeiten können.

Ausführen des Befehls pack

Führen Sie die folgenden Schritte aus, um ein NuGet-Paket aus Ihrem Projekt zu erstellen:

  1. Wählen Sie Build>Konfigurationsmanager aus, und legen Sie dann die Aktive Lösungskonfiguration auf Release fest.

  2. Wählen Sie das AppLogger-Projekt in Lösungs-Explorer aus, und wählen Sie dann Paket aus.

    Visual Studio erstellt das Projekt und die .nupkg-Datei.

  3. Überprüfen Sie das Ausgabefenster auf Angaben (ähnlich wie im folgenden Beispiel), die den Pfad zur Paketdatei enthalten. In diesem Beispiel befindet sich die integrierte Assembly in bin\Release\net6.0 entsprechend einem .NET 6.0-Ziel:

    1>------ Build started: Project: AppLogger, Configuration: Release Any CPU ------
    1>AppLogger -> d:\proj\AppLogger\AppLogger\bin\Release\net6.0\AppLogger.dll
    1>Successfully created package 'd:\proj\AppLogger\AppLogger\bin\Release\AppLogger.1.0.0.nupkg'.
    ========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
    
  4. Wenn Sie den Befehl Paket nicht im Menü sehen, ist Ihr Projekt wahrscheinlich kein SDK-Projekt und Sie müssen die NuGet CLI verwenden. Migrieren Sie das Projekt, und verwenden Sie die .NET CLI, oder befolgen Sie die Anleitungen unter Erstellen und Veröffentlichen eines .NET Framework-Pakets.

(Optional) Generieren des Pakets bei der Erstellung

Sie können Visual Studio so konfigurieren, dass das NuGet-Paket automatisch generiert wird, wenn Sie das Projekt erstellen.

  1. Wählen Sie ihr Projekt in Lösungs-Explorer aus, und wählen Sie dann Projekt><Projektname> Eigenschaften aus, wobei der <Projektname> der Name Ihres Projekts ist (in diesem Fall AppLogger).

  2. Erweitern Sie den Knoten Paket, wählen Sie Allgemein und dann NuGet-Paket auf Buildgenerieren aus.

    Screenshot showing package properties with Generate NuGet package on build selected.

Hinweis

Wenn Sie das Paket automatisch generieren, erhöht die zusätzliche Zeit zum Verpacken die Gesamt-Erstellungszeit für Ihr Projekt.

(Optional) Paketerstellung mit MSBuild

Als Alternative zur Verwendung des Menübefehls Packen unterstützen NuGet 4.x und höher und MSBuild 15.1 und höher ein pack-Ziel, sobald das Projekt die nötigen Paketdaten enthält:

  1. Öffnen Sie bei geöffnetem Projekt in Solution Explorer eine Eingabeaufforderung, indem Sie die Tools>Befehlszeile>Developer-Eingabeaufforderung.

    Die Eingabeaufforderung wird in Ihrem Projektverzeichnis geöffnet.

  2. Führen Sie den folgenden Befehl aus: msbuild -t:pack.

Weitere Informationen finden Sie unter Erstellen eines Pakets mit MSBuild.

Veröffentlichen des Pakets

Nachdem Sie eine .nupkg-Datei erstellt haben, veröffentlichen Sie sie auf nuget.org, indem Sie entweder die .NET CLI oder die NuGet CLI zusammen mit einem von nuget.org erworbenen API-Schlüssel verwenden.

Hinweis

  • Nuget.org überprüft alle hochgeladenen Pakete auf Viren und lehnt die Pakete ab, wenn Viren gefunden werden. Alle auf nuget.org aufgelisteten Pakete werden zudem regelmäßig überprüft.

  • Pakete, die auf nuget.org veröffentlicht werden, sind für andere Entwickler sichtbar, sofern Sie deren Auflistung nicht aufheben. Informationen zum privaten Hosten von Paketen finden Sie unter Hosten eigener NuGet-Feeds.

Erwerben des API-Schlüssels

Erstellen Sie vor der Veröffentlichung Ihres NuGet-Pakets einen API-Schlüssel:

  1. Melden Sie sich bei Ihrem nuget.org-Konto an, oder erstellen Sie ein Konto, wenn Sie noch keines besitzen.

  2. Klicken Sie auf Ihren Benutzernamen (oben rechts) und anschließend auf API-Schlüssel.

  3. Wählen Sie Erstellen aus, und geben Sie dann einen Namen für Ihren Schlüssel an.

  4. Wählen Sie unter Bereiche auswählen die Option Push aus.

  5. Geben Sie unter Pakete auswählen>Glob-Muster * ein.

  6. Klicken Sie auf Erstellen.

  7. Wählen Sie Kopieren aus, um den neuen Schlüssel zu kopieren.

    Screenshot that shows the new API key with the Copy link.

Wichtig

  • Halten Sie Ihren API-Schlüssel grundsätzlich geheim! Der API-Schlüssel ist wie ein Kennwort, mit dem jeder Benutzer Pakete in Ihrem Namen verwalten kann. Löschen Sie Ihren API-Schlüssel oder generieren Sie ihn neu, wenn er versehentlich offengelegt wird.
  • Speichern Sie den Schlüssel an einem sicheren Ort; Sie können den Schlüssel später nicht erneut kopieren. Wenn Sie auf die Seite „API-Schlüssel“ zurückkehren, müssen Sie den Schlüssel erneut generieren, um ihn zu kopieren. Sie können den API-Schlüssel auch entfernen, wenn Sie Pakete nicht mehr mithilfe von Push übertragen möchten.

Mit der Bereichsauswahl können Sie separate API-Schlüssel für verschiedene Zwecke erstellen. Jeder Schlüssel hat seinen Ablaufzeitraum und kann auf bestimmte Pakete (oder Globmuster) festgelegt werden. Sie legen auch jeden Schlüssel auf bestimmte Vorgänge fest: Pushen sie neue Pakete und Paketversionen, pushen Sie nur neue Paketversionen oder heben Sie die Liste auf.

Durch das Festlegen des Gültigkeitsbereichs können Sie API-Schlüssel für verschiedene Personen erstellen, die Pakete für Ihre Organisation so verwalten, dass sie nur über die erforderlichen Berechtigungen verfügen.

Weitere Informationen finden Sie unter bereichsbezogene API-Schlüssel.

Veröffentlichen mit der .NET CLI oder NuGet CLI

Mit jedem der folgenden CLI-Tools können Sie ein Paket an den Server übertragen und veröffentlichen. Wählen Sie die Registerkarte für Ihr CLI-Tool, entweder .NET CLI oder NuGet CLI.

Die Verwendung der .NET CLI (dotnet.exe) ist die empfohlene Alternative zur Verwendung der NuGet CLI.

Führen Sie im Ordner, der die NUPKG-Datei enthält, den folgenden Befehl aus. Geben Sie ihren nupkg-Dateinamen an, und ersetzen Sie den Schlüsselwert durch Ihren API-Schlüssel.

dotnet nuget push Contoso.08.28.22.001.Test.1.0.0.nupkg --api-key qz2jga8pl3dvn2akksyquwcs9ygggg4exypy3bhxy6w6x6 --source https://api.nuget.org/v3/index.json

In der Ausgabe wird das Ergebnis des Veröffentlichungsprozesses angezeigt.

Pushing Contoso.08.28.22.001.Test.1.0.0.nupkg to 'https://www.nuget.org/api/v2/package'...
  PUT https://www.nuget.org/api/v2/package/
warn : All published packages should have license information specified. Learn more: https://aka.ms/nuget/authoring-best-practices#licensing.
  Created https://www.nuget.org/api/v2/package/ 1221ms
Your package was pushed.

Weitere Informationen finden Sie unter dotnet Nuget Push.

Hinweis

Um zu vermeiden, dass Ihr Testpaket auf nuget.org live ist, können Sie an die nuget.org Testwebsite unter https://int.nugettest.org pushen. Beachten Sie, dass Pakete, die in int.nugettest.org hochgeladen wurden, möglicherweise nicht beibehalten werden.

Veröffentlichungsfehler

Fehler des Befehls push geben das Problem in der Regel an. Beispielsweise könnte das Problem darin liegen, dass Sie vergessen haben, die Versionsnummer in ihrem Projekt anzupassen, und Sie versuchen ein Paket zu veröffentlichen, das bereits vorhanden ist.

Außerdem werden Fehler angezeigt, wenn Ihr API-Schlüssel ungültig oder abgelaufen ist, oder wenn Sie versuchen, ein Paket mit einem Bezeichner zu veröffentlichen, der bereits auf dem Host vorhanden ist. Angenommen, der Bezeichner AppLogger-test ist bereits auf nuget.org vorhanden. Wenn Sie versuchen, ein Paket mit diesem Bezeichner zu veröffentlichen, gibt der push-Befehl den folgenden Fehler:

Response status code does not indicate success: 403 (The specified API key is invalid,
has expired, or does not have permission to access the specified package.).

Wenn dieser Fehler angezeigt wird, überprüfen Sie, ob Sie einen gültigen API-Schlüssel verwenden, der noch nicht abgelaufen ist. Ist dies der Fall, gibt der Fehler an, dass der Paketbezeichner bereits auf dem Host vorhanden ist. Ändern Sie den Paketbezeichner, erstellen Sie das Projekt neu, erstellen Sie die .nupkg-Datei neu, und versuchen Sie den push-Befehl erneut.

Verwalten des veröffentlichten Pakets

Wenn Ihr Paket erfolgreich veröffentlicht wird, erhalten Sie eine Bestätigungs-E-Mail. Um das gerade veröffentlichte Paket anzuzeigen, wählen Sie nuget.org ihren Benutzernamen oben rechts aus, und wählen Sie dann Pakete verwalten aus.

Hinweis

Möglicherweise dauert es etwas, bis Ihr Paket indiziert wurde und anderen Benutzern in den Suchergebnissen angezeigt wird. Während dieser Zeit wird Ihr Paket unter Nicht aufgelistete Pakete angezeigt, und auf der Paketseite wird die folgende Meldung angezeigt:

Screenshot showing the publishing message that's displayed when you upload a package to nuget.org.

Sie haben jetzt Ihr erstes NuGet-Paket auf nuget.org veröffentlicht, das andere Entwickler nun in ihren Projekten verwenden können.

Wenn Sie ein Paket erstellt haben, das nicht hilfreich ist (z. B. dieses Beispielpaket, das mit einer leeren Klassenbibliothek erstellt wurde), oder Sie entscheiden, dass das Paket nicht sichtbar sein soll, können Sie die Auflistung des Pakets aufheben, um es aus den Suchergebnissen auszublenden:

  1. Nachdem das Paket auf der Seite Pakete verwalten unter Veröffentlichte Pakete angezeigt wird, wählen Sie das Stiftsymbol neben dem Paketeintrag aus.

    Screenshot that shows the Edit icon for a package listing on nuget.org.

  2. Wählen Sie auf der nächsten Seite Listing55222 aus, deaktivieren Sie das Kontrollkästchen In Suchergebnissen auflisten, und wählen Sie dann Speichern aus.

    Screenshot that shows clearing the List checkbox for a package on nuget.org.

Das Paket wird jetzt unter Nicht aufgelistete Pakete in Pakete verwalten aufgeführt und in den Suchergebnissen nicht mehr angezeigt.

Hinweis

Um zu vermeiden, dass Ihr Testpaket auf nuget.org live ist, können Sie an die nuget.org Testwebsite unter https://int.nugettest.org pushen. Beachten Sie, dass Pakete, die in int.nugettest.org hochgeladen wurden, möglicherweise nicht beibehalten werden.

Hinzufügen einer Infodatei oder anderen Datei

Bearbeiten Sie die Projektdatei, und verwenden Sie die content-Eigenschaft, um Dateien, die im Paket eingeschlossen werden sollen, direkt anzugeben:

<ItemGroup>
  <Content Include="readme.txt">
    <Pack>true</Pack>
    <PackagePath>\</PackagePath>
  </Content>
</ItemGroup>

In diesem Beispiel gibt die Eigenschaft eine Datei namens readme.txt im Projektstamm an. Visual Studio zeigt unmittelbar nach Installation des Pakets den Inhalt der Datei als Nur-Text an. Für Pakete, die als Abhängigkeiten installiert wurden, werden keine Infodateien angezeigt. Die Infodatei für das Paket „HtmlAgilityPack“ wird z. B. folgendermaßen angezeigt:

1 ----------------------------------------------------
2 ---------- Html Agility Pack Nuget Readme ----------
3 ----------------------------------------------------
4
5 ----Silverlight 4 and Windows Phone 7.1+ projects-----
6 To use XPATH features: System.Xml.Xpath.dll from the 3 Silverlight 4 SDK must be referenced. 
7 This is normally found at 
8 %ProgramFiles(x86)%\Microsoft SDKs\Microsoft SDKs\Silverlight\v4.0\Libraries\Client 
9 or 
10 %ProgramFiles%\Microsoft SDKs\Microsoft SDKs\Silverlight\v4.0\Libraries\Client
11
12 ----Silverlight 5 projects-----
13 To use XPATH features: System.Xml.Xpath.dll from the Silverlight 5 SDK must be referenced. 
14 This is normally found at 
15 %ProgramFiles(x86)%\Microsoft SDKs\Microsoft SDKs\Silverlight\v5.0\Libraries\Client 
16 or 
17 %ProgramFiles%\Microsoft SDKs\Microsoft SDKs\Silverlight\v5.0\Libraries\Client

Hinweis

Wenn Sie readme.txt nur im Projektstamm hinzufügen, ohne sie in die Eigenschaft content der Projektdatei aufzunehmen, wird sie nicht in das Paket eingeschlossen.

Auf Channel 9 und auf YouTube finden Sie weitere Videos zu NuGet.

Herzlichen Glückwunsch zum Erstellen eines NuGet-Pakets mithilfe einer Visual Studio .NET-Klassenbibliothek. Wechseln Sie zum nächsten Artikel, um zu erfahren, wie Sie ein NuGet-Paket mit visual Studio .NET Framework erstellen.

Um mehr über NuGet zu erfahren, lesen Sie die folgenden Artikel: