Skip to main content

Arbeiten mit der NuGet-Registrierung

Du kannst die dotnet-Befehlszeilenschnittstelle (command-line interface, CLI) so konfigurieren, dass NuGet-Pakete in der GitHub Packages veröffentlicht werden und in der GitHub Packages gespeicherte Pakete als Abhängigkeiten in einem .NET-Projekt verwendet werden.

Wer kann dieses Feature verwenden?

GitHub Packages ist verfügbar mit GitHub Free, GitHub Pro, GitHub Free für Organisationen, GitHub Team, GitHub Enterprise Cloud und GitHub Enterprise Server 3.0 oder höher.

URL für die NuGet-Registrierung

Wenn du auf GitHub unter GitHub.com zugreifst, veröffentlichst du Pakete in https://nuget.pkg.github.com. In den Beispielen in diesem Artikel wird diese URL verwendet.

Wenn du auf GitHub in einer anderen Domäne zugreifst, z. B. octocorp.ghe.com, ersetzt du „https://nuget.pkg.github.com“ durch https://nuget.SUBDOMAIN.ghe.com, wobei SUBDOMAIN die eindeutige Unterdomäne deines Unternehmens ist.

Bei GitHub Packages authentifizieren

GitHub Packages unterstützt nur die Authentifizierung mit einem personal access token (classic). Weitere Informationen findest du unter Verwalten deiner persönlichen Zugriffstoken.

Du benötigst ein Zugriffstoken, um private, interne und öffentliche Pakete zu veröffentlichen, zu installieren und zu löschen.

Du kannst ein personal access token (classic) für die Authentifizierung bei GitHub Packages oder bei der GitHub-API verwenden. Wenn du ein personal access token (classic) erstellst, kannst du dem Token je nach Bedarf verschiedene Bereiche zuweisen. Weitere Informationen zu paketbezogenen Bereichen für ein personal access token (classic) findest du unter Informationen zu Berechtigungen für GitHub-Pakete.

Um dich bei einer GitHub Packages-Registrierung innerhalb eines GitHub Actions-Workflows zu authentifizieren, kannst du Folgendes verwenden:

  • GITHUB_TOKEN, um Pakete zu veröffentlichen, die mit dem Workflowrepository verbunden sind.
  • Ein personal access token (classic) (diesem muss mindestens der Bereich read:packages zugeordnet sein), um Pakete zu installieren, die zu anderen privaten Repositorys gehören (auf die GITHUB_TOKEN nicht zugreifen kann)

Authentifizieren in einem GitHub Actions-Workflow

Diese Registrierung unterstützt präzise Berechtigungen. Wenn dein GitHub Actions-Workflow ein personal access token zum Authentifizieren bei einer Registrierung verwendet, solltest du für Registrierungen, die differenzierte Berechtigungen unterstützen, deinen Workflow unbedingt so aktualisieren, dass das GITHUB_TOKEN verwendet wird. Eine Anleitung zum Aktualisieren deiner Workflows, die sich mit einem personal access token bei einer Registrierung authentifizieren, findest du unter Veröffentlichen und Installieren eines Pakets mit GitHub Actions.

Hinweis: Die Möglichkeit für GitHub Actions-Workflows, Pakete mithilfe der REST-API zu löschen und wiederherzustellen, befindet sich derzeit in der public preview und kann noch geändert werden.

Sie können ein GITHUB_TOKEN in einem GitHub Actions-Workflow verwenden, um ein Paket mithilfe der REST-API zu löschen oder wiederherzustellen, wenn das Token über die admin-Berechtigung für das Paket verfügt. Repositorys, die Pakete mithilfe eines Workflows veröffentlichen, und Repositorys, die du explizit mit Paketen verbunden hast, erhalten automatisch die admin-Berechtigung für Pakete im Repository.

Weitere Informationen zum GITHUB_TOKEN findest du unter Automatische Tokenauthentifizierung. Weitere Informationen zu den Best Practices bei der Verwendung einer Registrierung in Actions findest du unter Sicherheitshärtung für GitHub Actions.

Verwende den folgenden Befehl, um dich bei GitHub Packages in einem GitHub Actions-Workflow mit dem GITHUB_TOKEN zu authentifizieren, anstatt ein hartcodiertes personal access token in einer Datei vom Typ „nuget.config“ im Repository zu verwenden:

dotnet nuget add source --username USERNAME --password ${{ secrets.GITHUB_TOKEN }} --store-password-in-clear-text --name github "https://nuget.pkg.github.com/NAMESPACE/index.json"

Ersetze NAMESPACE durch den Namen des persönlichen Kontos oder der Organisation , auf das bzw. die deine Pakete ausgerichtet sind.

Ersetzen Sie USERNAME durch den Benutzernamen, der beim Herstellen einer Verbindung mit einer authentifizierten Quelle zu verwenden ist.

Du kannst außerdem auswählen, ob du Zugriffsberechtigungen auf Pakete unabhängig voneinander für GitHub Codespaces und GitHub Actions erteilen möchtest. Weitere Informationen findest du unter Konfigurieren der Zugriffssteuerung und Sichtbarkeit von Paketen und unter Konfigurieren der Zugriffssteuerung und Sichtbarkeit von Paketen.

Authentifizieren mit einem personal access token

GitHub Packages unterstützt nur die Authentifizierung mit einem personal access token (classic). Weitere Informationen findest du unter Verwalten deiner persönlichen Zugriffstoken.

Du benötigst ein Zugriffstoken, um private, interne und öffentliche Pakete zu veröffentlichen, zu installieren und zu löschen.

Du kannst ein personal access token (classic) für die Authentifizierung bei GitHub Packages oder bei der GitHub-API verwenden. Wenn du ein personal access token (classic) erstellst, kannst du dem Token je nach Bedarf verschiedene Bereiche zuweisen. Weitere Informationen zu paketbezogenen Bereichen für ein personal access token (classic) findest du unter Informationen zu Berechtigungen für GitHub-Pakete.

Um dich bei einer GitHub Packages-Registrierung innerhalb eines GitHub Actions-Workflows zu authentifizieren, kannst du Folgendes verwenden:

  • GITHUB_TOKEN, um Pakete zu veröffentlichen, die mit dem Workflowrepository verbunden sind.
  • Ein personal access token (classic) (diesem muss mindestens der Bereich read:packages zugeordnet sein), um Pakete zu installieren, die zu anderen privaten Repositorys gehören (auf die GITHUB_TOKEN nicht zugreifen kann)

Du musst ein personal access token (classic) mit den entsprechenden Bereichen verwenden, um Pakete in GitHub Packages zu veröffentlichen und zu installieren. Weitere Informationen findest du unter Einführung in GitHub-Pakete.

Zum Authentifizieren bei GitHub Packages mit der dotnet-Befehlszeilenschnittstelle (CLI) erstellst du eine Datei nuget.config in deinem Projektverzeichnis und gibst unter packageSources GitHub Packages als Quelle für den dotnet CLI-Client an.

Dabei musst du Folgendes ersetzen:

  • USERNAME durch den Namen deines persönlichen Kontos auf GitHub.
  • TOKEN durch dein personal access token (classic)
  • NAMESPACE durch den Namen des persönlichen Kontos oder der Organisation , dem bzw. der deine Pakete zugeordnet sind.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <packageSources>
        <clear />
        <add key="github" value="https://nuget.pkg.github.com/NAMESPACE/index.json" />
    </packageSources>
    <packageSourceCredentials>
        <github>
            <add key="Username" value="USERNAME" />
            <add key="ClearTextPassword" value="TOKEN" />
        </github>
    </packageSourceCredentials>
</configuration>

Veröffentlichen eines Pakets

Sie können ein Paket in GitHub Packages veröffentlichen, indem Sie sich mit einer nuget.config-Datei authentifizieren, die Befehlszeilenoption --api-key mit Ihrem personal access token (classic) für GitHub verwenden oder den Befehl nutzen, der mithilfe der Befehlszeilenschnittstelle (CLI) dotnet direkt über die Befehlszeile ausgeführt werden kann.

Ersetzen Sie OWNER durch Ihren Benutzernamen oder den Firmennamen und YOUR_GITHUB_PAT durch Ihr personal access token.

dotnet nuget add source --username OWNER --password YOUR_GITHUB_PAT --store-password-in-clear-text --name github "https://nuget.pkg.github.com/OWNER/index.json"

Die NuGet-Registrierung speichert Pakete in deinem Organisationskonto oder in deinem persönlichen Konto und ermöglicht die Zuordnung von Paketen zu einem Repository. Du kannst wählen, ob Berechtigungen von einem Repository geerbt oder präzise Berechtigungen unabhängig von einem Repository festgelegt werden sollen.

Wenn du ein Paket zum ersten Mal veröffentlichst, ist die Sichtbarkeit standardmäßig auf privat eingestellt. Informationen zum Ändern der Sichtbarkeit oder zum Festlegen von Zugriffsberechtigungen findest du unter Konfigurieren der Zugriffssteuerung und Sichtbarkeit von Paketen. Weitere Informationen zum Verknüpfen eines veröffentlichten Pakets mit einem Repository findest du unter Verbinden eines Repositorys mit einem Paket.

Wenn du in der .csproj-Datei des Projekts eine RepositoryURL angibst, wird das veröffentlichte Paket automatisch mit dem angegebenen Repository verbunden. Weitere Informationen findest du unter Arbeiten mit der NuGet-Registrierung. Informationen zum Verknüpfen eines bereits veröffentlichten Pakets mit einem Repository findest du unter Verbinden eines Repositorys mit einem Paket.

Veröffentlichen eines Pakets unter Verwendung eines personal access token für GitHub als API-Schlüssel

Falls Sie noch nicht über ein personal access token verfügen, das Sie für Ihr Konto in GitHub verwenden können, finden Sie unter „Verwalten deiner persönlichen Zugriffstoken“ weitere Informationen.

  1. Erstelle ein neues Projekt. Ersetze PROJECT_NAME durch den Namen, den du dem Projekt geben möchtest.

    dotnet new console --name PROJECT_NAME
    
  2. Packe das Projekt.

    dotnet pack --configuration Release
    
  3. Veröffentliche das Paket, und verwende dabei dein personal access token als API-Schlüssel. Ersetze PROJECT_NAME durch den Namen des Projekts, 1.0.0 durch die Versionsnummer des Pakets und YOUR_GITHUB_PAT durch dein personal access token.

    dotnet nuget push "bin/Release/PROJECT_NAME.1.0.0.nupkg"  --api-key YOUR_GITHUB_PAT --source "github"
    

Nachdem Du ein Paket veröffentlicht hast, kannst Du das Paket auf GitHub ansehen. Weitere Informationen findest du unter Pakete anzeigen.

Veröffentlichen eines Pakets mithilfe einer Datei nuget.config

Wenn du eine Veröffentlichung ausführst,wenn du dein Paket mit einem Repository verknüpfst, muss der OWNER des in deiner CSPROJ-Datei angegebenen Repositorys mit dem NAMESPACE übereinstimmen, den du in deiner nuget.config-Authentifizierungsdatei verwendest. Gib die Versionsnummer in deiner CSPROJ-Datei an, oder erhöhe sie, und erstelle dann mit dem Befehl dotnet pack eine NUSPEC-Datei für diese Version. Weitere Informationen zum Erstellen deines Pakets findest du in der Microsoft-Dokumentation unter Erstellen und Veröffentlichen eines Pakets.

Hinweis: Wenn du ein Paket veröffentlichst, das mit einem Repository verknüpft ist, erbt das Paket automatisch die Zugriffsberechtigungen des verknüpften Repositorys, und GitHub Actions-Workflows im verknüpften Repository erhalten automatisch Zugriff auf das Paket, es sei denn, deine Organisation hat die automatische Vererbung von Zugriffsberechtigungen deaktiviert. Weitere Informationen findest du unter Konfigurieren der Zugriffssteuerung und Sichtbarkeit von Paketen.

  1. Authentifizieren bei GitHub Packages. Weitere Informationen findest Du unter Authentifizieren bei GitHub Packages.

  2. Erstelle ein neues Projekt. Ersetze PROJECT_NAME durch den Namen, den du dem Projekt geben möchtest.

    dotnet new console --name PROJECT_NAME
    
  3. Füge die spezifischen Informationen deines Projekts in der Datei deines Projekts hinzu, die auf .csproj endet. Stelle Folgendes sicher:

    • 1.0.0 gibt die Versionsnummer des Pakets zurück.
    • OWNER mit dem Namen des persönlichen Kontos oder der Organisation, die das Repository besitzt, für das du dein Paket verknüpfen möchtest.
    • REPOSITORY mit dem Namen des Repositorys, mit dem du dein Paket verbinden möchtest
    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp3.0</TargetFramework>
        <PackageId>PROJECT_NAME</PackageId>
        <Version>1.0.0</Version>
        <Authors>AUTHORS</Authors>
        <Company>COMPANY_NAME</Company>
        <PackageDescription>PACKAGE_DESCRIPTION</PackageDescription>
        <RepositoryUrl>https://github.com/OWNER/REPOSITORY</RepositoryUrl>
      </PropertyGroup>
    
    </Project>
    
  4. Packe das Projekt.

    dotnet pack --configuration Release
    
  5. Veröffentliche das Paket mit dem key, den du in der Datei nuget.config angegeben hast. Ersetze PROJECT_NAME durch den Namen des Projekts und 1.0.0 durch die Versionsnummer des Pakets.

    dotnet nuget push "bin/Release/PROJECT_NAME.1.0.0.nupkg" --source "github"
    

Nachdem Du ein Paket veröffentlicht hast, kannst Du das Paket auf GitHub ansehen. Weitere Informationen findest du unter Pakete anzeigen.

Veröffentlichen mehrerer Pakete im gleichen Repository

Um mehrere Pakete mit dem gleichen Repository zu verbinden, verwende die gleiche GitHub-Repository-URL in den Feldern vom Typ RepositoryURL in allen .csproj-Projektdateien einfügen. GitHub ermittelt das Repository anhand dieses Felds.

Im folgenden Beispiel werden die Projekte MY_APP und MY_OTHER_APP im selben Repository veröffentlicht:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.0</TargetFramework>
    <PackageId>MY_APP</PackageId>
    <Version>1.0.0</Version>
    <Authors>Octocat</Authors>
    <Company>GitHub</Company>
    <PackageDescription>This package adds a singing Octocat!</PackageDescription>
    <RepositoryUrl>https://github.com/my-org/my-repo</RepositoryUrl>
  </PropertyGroup>

</Project>
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.0</TargetFramework>
    <PackageId>MY_OTHER_APP</PackageId>
    <Version>1.0.0</Version>
    <Authors>Octocat</Authors>
    <Company>GitHub</Company>
    <PackageDescription>This package adds a dancing Octocat!</PackageDescription>
    <RepositoryUrl>https://github.com/my-org/my-repo</RepositoryUrl>
  </PropertyGroup>

</Project>

Installieren eines Pakets

Das Verwenden von Paketen von GitHub in deinem Projekt ähnelt dem Verwenden von Paketen von nuget.org. Füge deine Paketabhängigkeiten in der CSPROJ-Datei hinzu, und gib dabei den Paketnamen und die Version an. Weitere Informationen zum Verwenden einer CSPROJ-Datei in deinem Projekt findest du in der Microsoft-Dokumentation unter Arbeiten mit NuGet-Paketen.

  1. Authentifizieren bei GitHub Packages. Weitere Informationen findest Du unter Authentifizieren bei GitHub Packages.

  2. Um ein Paket zu verwenden, füge ItemGroup hinzu, und konfiguriere das Feld PackageReference in der CSPROJ-Projektdatei. Ersetze den PACKAGE_NAME-Wert in Include="PACKAGE_NAME" durch deine Paketabhängigkeit, und ersetze den X.X.X-Wert in Version="X.X.X" durch die Version des Pakets, die du verwenden möchtest:

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp3.0</TargetFramework>
        <PackageId>My-app</PackageId>
        <Version>1.0.0</Version>
       <Authors>Octocat</Authors>
        <Company>GitHub</Company>
       <PackageDescription>This package adds an Octocat!</PackageDescription>
        <RepositoryUrl>https://github.com/OWNER/REPOSITORY</RepositoryUrl>
      </PropertyGroup>
    
      <ItemGroup>
        <PackageReference Include="PACKAGE_NAME" Version="X.X.X" />
      </ItemGroup>
    
    </Project>
    
  3. Du installierst die Pakete mit dem Befehl restore.

    dotnet restore
    

Problembehandlung

Wenn du GITHUB_TOKEN verwendest, um dich bei einer GitHub Packages-Registrierung in einem GitHub Actions-Workflow zu authentifizieren, kann das Token nicht auf Pakete in privaten Repositorys zugreifen, wenn es sich um ein anderes Repository aus dasjenige handelt, in dem der Workflow ausgeführt wird. Um auf Pakete zuzugreifen, die anderen Repositorys zugeordnet sind, musst du stattdessen ein personal access token (classic) mit dem Geltungsbereich read:packages definieren und dieses Token als Geheimnis übergeben.

Weitere Informationsquellen