Freigeben über


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

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

Die Schnellstartanleitung ist nur für Windows-Benutzer vorgesehen. Wenn Sie einen Mac verwenden, 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.microsoft.cominstallieren oder die Professional- oder Enterprise-Edition verwenden.

    Visual Studio 2017 und höher enthält automatisch NuGet-Funktionen, wenn Sie eine .NET-bezogene 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 jeder .NET Core-bezogenen Workload installiert. Installieren Sie andernfalls das .NET Core SDK-, um die .NET CLI abzurufen. Die .NET CLI ist für .NET-Projekte erforderlich, die das SDK-Format (SDK-Attribut) verwenden. Die standardmäßige .NET-Klassenbibliotheksvorlage in Visual Studio 2017 und höher verwendet das SDK-Attribut.

    Wichtig

    Wenn Sie mit einem Projekt im Nicht-SDK-Stil arbeiten, befolgen Sie die Verfahren in Erstellen und Veröffentlichen eines .NET Framework-Pakets (Visual Studio) stattdessen zum Erstellen und Veröffentlichen des Pakets. Für diesen Artikel wird die .NET CLI empfohlen. Obwohl Sie jedes NuGet-Paket mithilfe der NuGet CLI veröffentlichen können, sind einige der Schritte in diesem Artikel spezifisch für SDK-Formatprojekte und die .NET CLI. Die NuGet CLI wird für Projekte im Nicht-SDK-Stil (in der Regel .NET Framework) verwendet.

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

  • Installieren Sie die NuGet CLI, indem Sie sie von nuget.orgherunterladen. Fügen Sie die nuget.exe Datei zu einem geeigneten Ordner hinzu, und fügen Sie diesen Ordner ihrer PATH-Umgebungsvariable hinzu.

Erstellen eines Klassenbibliotheksprojekts

Sie können ein vorhandenes .NET-Klassenbibliotheksprojekt für den Code verwenden, den Sie packen möchten, oder eines wie folgt erstellen:

  1. Wählen Sie in Visual Studio Datei>neues>Projektaus.

  2. Wählen Sie im Fenster Erstellen eines neuen Projekts in den Dropdownlisten C#-, Windowsund Bibliothek aus.

  3. Wählen Sie in der resultierenden Liste der Projektvorlagen Klassenbibliothek aus (mit der Beschreibung Ein Projekt zum Erstellen einer Klassenbibliothek, die auf .NET- oder .NET Standard-ausgerichtet ist), und wählen Sie dann Nextaus.

  4. Geben Sie im Fenster Konfigurieren des neuen ProjektsAppLogger für den Projektnamenein, und wählen Sie dann Weiteraus.

  5. Wählen Sie im Fenster Zusätzliche Informationen ein geeignetes Framework-aus, und klicken Sie dann auf 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 verwendet werden soll, finden Sie unter Wann Sie .NET 5.0 oder .NET 6.0 im Vergleich zu .NET Standard anvisieren sollten.

  6. Um sicherzustellen, dass das Projekt ordnungsgemäß erstellt wurde, wählen Sie Build>Build Solutionaus. Die DLL befindet sich im Debugordner (oder 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 jedoch einen funktionalen Code für das Paket wünschen, schließen Sie den folgenden Code ein:

    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 im Projektmappen-Exploreraus, und wählen Sie dann Projekt><Projektnamen> Eigenschaftenaus, wobei <Projektname> der Name Des Projekts ist.

  2. Erweitern Sie den Knoten Package, und wählen Sie dann Allgemeinaus.

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

    Screenshot mit den NuGet-Paketeigenschaften in einem Visual Studio-Projekt.

  3. Bei Paketen, die für den öffentlichen Gebrauch erstellt wurden, achten Sie besonders auf die Tags Eigenschaft, da Tags anderen helfen, Ihr Paket zu finden und zu verstehen, was es tut.

  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 (im SDK-Format) den .nuspec--Dateieigenschaften zugeordnet werden, finden Sie unter Packziele. Eine Beschreibung der .nuspec Dateieigenschaften finden Sie in der NUSPEC-Dateireferenz. Alle diese Eigenschaften werden in das .nuspec Manifest eingefügt, das Visual Studio für das Projekt erstellt.

    Wichtig

    Sie müssen dem Paket einen Bezeichner zuweisen, der für nuget.org oder den host, den Sie verwenden, eindeutig 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 AppLogger.csproj Projektdatei anzuzeigen, wählen Sie Project>Projektdatei bearbeitenaus.

    Die Registerkarte AppLogger.csproj wird geladen.

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

Ausführen des Paketbefehls

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

  1. Wählen Sie Build-Konfiguration>im Configuration Manageraus, und legen Sie dann die Aktive Lösungskonfiguration auf Releasefest.

  2. Wählen Sie das AppLogger-Projekt im Projektmappen-Exploreraus, und wählen Sie dann Packaus.

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

  3. Untersuchen Sie das Ausgabefenster für Details, das den Pfad zur Paketdatei enthält. In diesem Beispiel befindet sich die erstellte Assembly in bin\Release\net6.0, passend für ein .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 der Befehl Pack im Menü nicht angezeigt wird, ist Ihr Projekt wahrscheinlich kein SDK-Formatprojekt, und Sie müssen die NuGet CLI verwenden. Entweder das Projekt migrieren und ein .NET CLI verwenden, oder sehen Sie unter: Erstellen und Veröffentlichen eines .NET Framework-Pakets für Schritt-für-Schritt-Anleitungen.

(Optional) Paket beim Build generieren

Sie können Visual Studio so konfigurieren, dass das NuGet-Paket beim Erstellen des Projekts automatisch generiert wird:

  1. Wählen Sie Ihr Projekt im Projektmappen-Exploreraus, und wählen Sie dann Projekt><Eigenschaft> aus, wobei <Projektname> der Name Ihres Projekts ist (in diesem Fall AppLogger).

  2. Erweitern Sie den Knoten Package, wählen Sie Allgemeinaus, und wählen Sie dann NuGet-Paket beim Build generierenaus.

    Screenshot, das die Paketeigenschaften zeigt, bei denen

Anmerkung

Wenn Sie das Paket automatisch generieren, erhöht die zusätzliche Zeit zum Packen die Gesamtbuildzeit für Ihr Projekt.

(Optional) Packen mit MSBuild

Alternativ zur Verwendung des Menübefehls Pack unterstützt NuGet 4.x+ und MSBuild 15.1+ ein pack Ziel, wenn das Projekt die erforderlichen Paketdaten enthält:

  1. Öffnen Sie im Projektmappen-ExplorerIhr Projekt, und öffnen Sie eine Eingabeaufforderung, indem Sie Tools>Befehlszeile>Entwickler-Eingabeaufforderungauswählen.

    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 mithilfe von MSBuild.

Veröffentlichen des Pakets

Nachdem Sie eine .nupkg--Datei erstellt haben, veröffentlichen Sie sie mit der .NET CLI oder der NuGet CLI, zusammen mit einem API-Schlüssel, der von nuget.org abgerufen wurde, in nuget.org.

Anmerkung

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

  • Pakete, die Sie in nuget.org veröffentlichen, sind für andere Entwickler öffentlich sichtbar, es sei denn, Sie heben sie auf. Informationen zum privaten Hosting von Paketen finden Sie unter Hosting eigener NuGet-Feeds.

API-Schlüssel abrufen

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 neues Konto, wenn Sie noch keines besitzen.

  2. Wählen Sie oben rechts Ihren Benutzernamen aus, und wählen Sie dann API Keysaus.

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

  4. Wählen Sie unter Auswählen von Bereichen, Pushaus.

  5. Geben Sie unter "Pakete auswählen">Glob-Musterdas Zeichen * ein.

  6. Wählen Sie Erstellenaus.

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

    Screenshot mit dem neuen API-Schlüssel und dem Kopierlink.

Wichtig

  • Bewahren Sie ihren API-Schlüssel immer als geheim auf. Der API-Schlüssel ist wie ein Kennwort, mit dem jeder Pakete in Ihrem Auftrag verwalten kann. Löschen oder regenerieren Sie Ihren API-Schlüssel, wenn er versehentlich angezeigt wird.
  • Speichern Sie Ihren Schlüssel an einem sicheren Speicherort, da Sie den Schlüssel später nicht mehr kopieren können. Wenn Sie zur API-Schlüsselseite zurückkehren, müssen Sie den Schlüssel neu generieren, um ihn zu kopieren. Sie können den API-Schlüssel auch entfernen, wenn Sie keine Pushpakete mehr verschieben möchten.

Mit Scoping können Sie separate API-Schlüssel für unterschiedliche Zwecke erstellen. Jeder Schlüssel verfügt über einen Ablaufzeitrahmen, und Sie können den Schlüssel auf bestimmte Pakete oder Globmuster beschränken. 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 Scoping können Sie API-Schlüssel für verschiedene Personen erstellen, die Pakete für Ihre Organisation verwalten, um ihnen nur die notwendigen Berechtigungen zu geben.

Weitere Informationen finden Sie unter bereichsbezogenen API-Schlüsseln.

Veröffentlichen mit .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 aus, 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

Die Ausgabe zeigt die Ergebnisse des Veröffentlichungsprozesses an:

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.

Anmerkung

Wenn Sie verhindern möchten, dass Ihr Testpaket auf nuget.org veröffentlicht wird, können Sie es an die Testseite auf nuget.org mit der Kennung https://int.nugettest.orgübertragen. Beachten Sie, dass Pakete, die auf int.nugettest.org hochgeladen werden, möglicherweise nicht beibehalten werden.

Veröffentlichungsfehler

Fehler aus dem Befehl push deuten in der Regel auf das Problem hin. Sie haben beispielsweise vergessen, die Versionsnummer in Ihrem Projekt zu aktualisieren, sodass Sie versuchen, ein bereits vorhandenes Paket zu veröffentlichen.

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 bereits für nuget.org vorhanden ist. Wenn Sie versuchen, ein Paket mit diesem Bezeichner zu veröffentlichen, gibt der Befehl push den folgenden Fehler aus:

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. Wenn das der Fall ist, gibt der Fehler an, dass der Paketbezeichner bereits auf dem Host vorhanden ist. Um den Fehler zu beheben, ändern Sie den Paketbezeichner so, dass er eindeutig ist, erstellen Sie das Projekt neu, erstellen Sie die .nupkg- Datei neu, und wiederholen Sie den befehl push.

Verwalten des veröffentlichten Pakets

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

Anmerkung

Es kann eine Weile dauern, bis Ihr Paket indiziert wird und in Suchergebnissen angezeigt wird, in denen andere es finden können. Während dieser Zeit wird Ihr Paket unter Nicht aufgelisteten Paketenangezeigt, und auf der Paketseite wird die folgende Meldung angezeigt:

Screenshot mit der Veröffentlichungsnachricht, die angezeigt wird, wenn Sie ein Paket in nuget.org hochladen.

Sie haben nun ein NuGet-Paket für nuget.org veröffentlicht, das andere Entwickler 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 Liste aufheben, das Paket aus den Suchergebnissen auszublenden:

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

    Screenshot mit dem Symbol

  2. Wählen Sie auf der nächsten Seite Eintragaus, deaktivieren Sie das Kontrollkästchen Liste in Suchergebnissen, und wählen Sie dann Speichernaus.

    Screenshot, der das Entfernen des Kontrollkästchens

Das Paket wird jetzt unter „Nicht aufgelistete Pakete“ in „Pakete verwalten“ angezeigt und erscheint nicht mehr in den Suchergebnissen.

Anmerkung

Um zu verhindern, dass Ihr Testpaket auf nuget.org live ist, können Sie es auf die nuget.org-Testwebsite https://int.nugettest.orghochladen. Beachten Sie, dass Pakete, die auf int.nugettest.org hochgeladen werden, möglicherweise nicht gespeichert werden.

Fügen Sie eine Readme-Datei oder eine andere Datei hinzu

Wenn Sie Dateien, die in das Paket eingeschlossen werden sollen, direkt angeben möchten, bearbeiten Sie die Projektdatei, und fügen Sie die content-Eigenschaft hinzu:

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

In diesem Beispiel gibt die Eigenschaft eine Datei mit dem Namen readme.txt im Projektstamm an. Visual Studio zeigt den Inhalt dieser Datei unmittelbar nach der Installation des Pakets als Nur-Text an. Readme-Dateien werden nicht für Pakete angezeigt, die als Abhängigkeiten installiert sind. Dies ist zum Beispiel die Readme-Datei für das HtmlAgilityPack-Paket.

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

Anmerkung

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

Finden Sie NuGet-Videos auf Channel 9 und YouTube-.

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.

Weitere Informationen, die NuGet zu bieten hat, finden Sie in den folgenden Artikeln: