Veröffentlichen von NuGet-Paketen

Nachdem Sie ein NuGet-Paket erstellt haben und über eine .nupkg-Datei verfügen, können Sie das Paket für andere Entwickler öffentlich oder privat zur Verfügung stellen. In diesem Artikel wird beschrieben, wie öffentliche Pakete global über nuget.org freigegeben werden.

Sie können private Pakete auch nur für ein Team oder eine Organisation verfügbar machen, indem Sie sie auf einer Dateifreigabe, einem privaten NuGet-Server oder einem Repository eines Drittanbieters wie myget, ProGet, Nexus Repository oder Artifactory hosten. Weitere Informationen findest du unter Hosten eigener NuGet-Feeds. Informationen zum Veröffentlichen mit Azure Artifacts finden Sie unter Veröffentlichen von Paketen in NuGet.org.

Veröffentlichen auf nuget.org

Um auf nuget.org zu veröffentlichen, melden Sie sich mit einem Microsoft-Konto bei nuget.org an, und verwenden Sie es, um ein kostenloses nuget.org Konto zu erstellen. Folgen Sie den Anweisungen unter Neues individuelles Konto hinzufügen.

Screenshot that shows the NuGet sign in link.

Sobald Sie über ein Konto verfügen, können Sie ein Paket auf nuget.org veröffentlichen, indem Sie das nuget.org Webportal, die dotnet CLI oder die NuGet CLI Version 4.1.0 oder höher verwenden. Sie können Pakete auch über Azure-Pipelines veröffentlichen.

Hochladen in das nuget.org-Webportal

So laden Sie ein Paket auf die nuget.org Website hoch:

  1. Wählen Sie Hochladen im oberen Menü unter nuget.org aus, navigieren Sie zum Paket auf Ihrem Computer, und wählen Sie Öffnen aus.

    Screenshot that shows the Upload dialog on nuget.org

    Wenn die Paket-ID bereits auf nuget.org vorhanden ist, wird ein Fehler angezeigt. Ändern Sie den Paketbezeichner in Ihrem Projekt, packen Sie neu und versuchen Sie den Upload erneut.

  2. Wenn der Paketname verfügbar ist, öffnet sich der Abschnitt Überprüfen, in dem Sie die Metadaten aus dem Paketmanifest überprüfen können. Wenn Sie eine Infodatei in Ihrem Paket enthalten haben, wählen Sie Vorschau, um sicherzustellen, dass alle Inhalte korrekt wiedergegeben werden.

    Um die Metadaten zu ändern, bearbeiten Sie Ihre Projektdatei oder die .nuspec-Datei, erstellen Sie sie neu, packen Sie sie neu und laden Sie sie erneut hoch.

  3. Wenn alle Informationen eingegeben sind, wählen Sie Senden.

Pushen mithilfe einer Befehlszeile

Um Pakete mit einer Befehlszeile an nuget.org zu übertragen, können Sie entweder dotnet.exe oder nuget.exe v4.1.0 oder höher verwenden, die die erforderlichen NuGet-Protokolle implementieren. Weitere Informationen finden Sie unter NuGet-Protokolle.

Um eine der beiden Befehlszeilen zu verwenden, müssen Sie zuerst einen API-Schlüssel aus nuget.org abrufen.

Erstellen eines API-Schlüssels

  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.

Verwenden der dotnet 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.

Verwenden von NuGet CLI

  1. Führen Sie an einer Eingabeaufforderung den folgenden Befehl aus, und ersetzen Sie <your_API_key> durch den von nuget.org erhaltenen Schlüssel:

    nuget setApiKey <your_API_key>
    

    Dieser Befehl speichert Ihren API-Schlüssel in Ihrer NuGet-Konfiguration, sodass Sie den API-Schlüssel nicht erneut auf demselben Computer eingeben müssen.

    Hinweis

    Dieser API-Schlüssel wird nicht für die Authentifizierung mit privaten Feeds verwendet. Informationen zum Verwalten von Anmeldeinformationen für die Authentifizierung mit diesen Quellen finden Sie im Befehl „Nuget-Quellen.

  2. Pushen Sie das Paket mit dem folgenden Befehl:

    nuget push YourPackage.nupkg -Source https://api.nuget.org/v3/index.json
    

Veröffentlichen mit Azure Pipelines

Sie können Pakete an nuget.org mit Azure-Pipelines als Teil Ihres kontinuierlichen Integrations-/kontinuierlichen Bereitstellungsprozesses (CI/CD) übertragen. Weitere Informationen finden Sie unter Veröffentlichen von NuGet-Paketen mit Azure Pipelines.

Veröffentlichen eines signierten Pakets

Um signierte Pakete zu übermitteln, müssen Sie zunächst das Zertifikat registrieren, das zum Signieren der Pakete verwendet wird. Wenn Sie die Anforderungen für signierte Pakete nicht erfüllen, lehnt nuget.org das Paket ab.

Grenzwerte für die Paketgröße

Nuget.org hat eine Paketgröße von ca. 250 MB. Wenn ein Paket, das diesen Grenzwert überschreitet, hochgeladen wird, wird der folgende Fehler angezeigt:

Die Paketdatei überschreitet den Größengrenzwert. Versuchen Sie es erneut.

Wenn ein solches Paket über die Befehlszeile verschoben wird, wird die folgende Ausgabe erzeugt:

  RequestEntityTooLarge https://www.nuget.org/api/v2/package/ 13903ms
error: Response status code does not indicate success: 413 (The package file exceeds the size limit. Please try again.).

Wenn Sie diese Fehler erhalten, sollten Sie den Paketinhalt überarbeiten, um seine Größe zu verringern. Wenn Sie Debugsymbole in Ihr Paket packen, sollten Sie sie separat veröffentlichen. Andere Ressourcen können separat als ein oder mehrere Abhängigkeitspakete veröffentlicht werden, um sie in kleinere Abschnitte zu verteilen.

Paketvalidierung und -indizierung

Pakete, die auf nuget.org veröffentlicht werden, durchlaufen mehrere Validierungen, wie z. B. Virenprüfungen, und bestehende Pakete werden regelmäßig gescannt. Wenn das Paket alle Validierungsprüfungen bestanden hat, kann es eine Weile dauern, bis es indiziert wird und in den Suchergebnissen erscheint. Während das Paket indiziert wird, wird es unter Nicht aufgelistete Pakete angezeigt, und auf der Paketseite wird die folgende Meldung angezeigt:

Screenshot of a message indicating that a package isn't yet published.

Sobald die Validierung und Indizierung abgeschlossen sind, erhalten Sie eine E-Mail, dass das Paket erfolgreich veröffentlicht wurde. Wenn das Paket eine Validierungsprüfung nicht besteht, wird die Paketseite aktualisiert, um den entsprechenden Fehler anzuzeigen, und Sie erhalten eine Benachrichtigung per E-Mail.

Die Validierung und Indizierung von Paketen dauert in der Regel weniger als 15 Minuten. Wenn die Paketveröffentlichung länger als erwartet dauert, überprüfen Sie nuget.org Status auf status.nuget.org. Wenn alle Systeme betriebsbereit sind und das Paket nicht innerhalb einer Stunde erfolgreich veröffentlicht wurde, wenden Sie sich an nuget.org, indem Sie den Link Support kontaktieren auf der Paketseite verwenden.

Um den Paketstatus anzuzeigen, wählen Sie Pakete verwalten unter Ihrem Kontonamen oben rechts auf nuget.org aus, und wählen Sie das Paket aus Veröffentlichte Pakete oder Nicht aufgelistete Pakete aus.

Verwalten von Paketbesitzern auf NuGet.org

Paketbesitzer haben volle Berechtigungen für das Paket (das Hinzufügen und Entfernen anderer Benutzer und das Veröffentlichen von Updates inbegriffen).

Obwohl die .nuspec-Datei des NuGet-Pakets die Autoren des Pakets definiert, verwendet nuget.org diese Metadaten nicht, um die Eigentumsverhältnisse zu definieren. Stattdessen weist nuget.org der Person, die das Paket veröffentlicht, Besitz zu, entweder dem angemeldeten Benutzer, der das Paket hochgeladen hat, oder dem Benutzer, dessen API-Schlüssel mit dotnet push, nuget SetApiKey oder nuget push verwendet wurde.

Führen Sie folgende Aktionen durch, um den Besitzer eines Pakets zu ändern:

  1. Melden Sie sich bei nuget.org mit dem Konto an, dem das Paket derzeit gehört.

  2. Wählen Sie Ihren Kontonamen oben rechts, wählen Sie Pakete verwalten und erweitern Sie Veröffentlichte Pakete.

  3. Wählen Sie das Paket aus, das Sie verwalten möchten, und wählen Sie auf der rechten Seite der Paketseite Paket verwalten.

  4. Wählen Sie auf der Seite „Paketverwaltung“ die Option Besitzer aus.

  5. Führen Sie eine der folgenden Aktionen aus:

    • Wählen Sie Entfernen aus, um den aktuellen Besitzer zu entfernen.

    • Fügen Sie unter Besitzer hinzufügen einen Besitzer hinzu, indem Sie dessen Benutzernamen sowie eine Nachricht eingeben und dann Hinzufügen wählen.

      Durch diese Aktion wird eine E-Mail mit einem Bestätigungslink an den neuen Mitbesitzer gesendet. Sobald der Benutzer auf den Bestätigungslink geklickt hat, hat er volle Berechtigungen, um andere Besitzer hinzuzufügen und zu entfernen. Bis zur Bestätigung wird im Abschnitt Aktuelle Eigentümer die ausstehende Genehmigung für diese Person angezeigt.

Um die Eigentümerschaft zu übertragen, z. B. wenn sich die Eigentümerschaft ändert oder ein Paket unter dem falschen Konto veröffentlicht wird, fügen Sie den neuen Eigentümer hinzu. Nachdem sie den Besitz bestätigt haben, können sie den alten Besitzer aus der Liste entfernen.

Um einem Unternehmen oder einer Gruppe Eigentumsrechte zuzuweisen, erstellen Sie ein nuget.org-Konto mit einem E-Mail-Alias, das an die entsprechenden Teammitglieder weitergeleitet wird. So sind beispielsweise verschiedene Microsoft ASP.NET-Pakete im gemeinsamen Besitz der Konten Microsoft und Aspnet.

Gelegentlich kann es vorkommen, dass ein Paket keinen aktiven Besitzer hat. Beispielsweise könnte der ursprüngliche Besitzer das Unternehmen verlassen haben, das das Paket erstellt hat. Wenn Sie der rechtmäßige Besitzer eines Pakets sind und das Paket wieder in Ihren Besitz bringen möchten, füllen Sie das Kontaktformular auf nuget.org aus, in dem Sie dem NuGet-Team Ihre Situation schildern können. Das Team folgt einem Prozess, um Ihren Besitz zu überprüfen, einschließlich des Versuchs, den vorhandenen Besitzer zu finden, und Sie können eine neue Einladung senden, um zum Paketbesitzer zu werden.

Nächste Schritte