Skip to main content

Diese Version von GitHub Enterprise Server wird eingestellt am 2026-08-25. Nicht mehr unterstützte Versionen werden nicht unterstützt. Es wird keine Patch-Freigabe vorgenommen, auch nicht für kritische Sicherheitsprobleme. Eine bessere Leistung, verbesserte Sicherheit und neue Features in GitHub Enterprise Server finden Sie unter Overview des Upgradeprozesses. Wenden Sie sich bei Fragen zum Upgrade an den GitHub Enterprise Support.

Arbeiten mit der NuGet-Registrierung

Sie können die dotnet Befehlszeilenschnittstelle (CLI) so konfigurieren, dass sie NuGet-Pakete auf GitHub Packages veröffentlicht und auf GitHub Packages gespeicherte Pakete als Abhängigkeiten in einem .NET-Projekt verwendet.

Hinweis

Dieser Pakettyp ist möglicherweise nicht für deine Instanz verfügbar, weil Websiteadministratoren die einzelnen unterstützten Pakettypen aktivieren oder deaktivieren können. Weitere Informationen finden Sie unter Konfigurieren der Paketökosystemunterstützung für dein Unternehmen.

Authentifizierung bei GitHub Packages

Hinweis

GitHub Packages unterstützt nur die Authentifizierung mit einem personal access token (classic). Weitere Informationen finden Sie 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) verwenden, um dich bei GitHub Packages oder der GitHub-API zu authentifizieren. 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) mit mindestens dem read:packages-Bereich für die Installation von Paketen, die anderen privaten Repositorys zugeordnet sind (GITHUB_TOKEN kann verwendet werden, wenn das Repository Lesezugriff auf das Paket enthält. Weitere Informationen findest du unter Konfigurieren der Zugriffssteuerung und Sichtbarkeit von Paketen).

Authentifizieren in einem GitHub Actions Workflow

Verwenden Sie den folgenden Befehl, um sich in einem GitHub Packages-Workflow bei GitHub Actions mit GITHUB_TOKEN zu authentifizieren, anstatt ein personal access token in einer nuget.config-Datei im Repository fest zu codieren:

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

Ersetzen Sie NAMESPACE durch den Namen des persönlichen Kontos oder der Organisation und dem bzw. der das Repository gehört, in dem Ihre Pakete gehostet sind.

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

Weitere Informationen zum GITHUB_TOKEN, das in GitHub Actions-Workflows verwendet wird, findest du unter Verwenden von GITHUB_TOKEN für die Authentifizierung in Workflows.

Authentifizieren mit einem personal access token

Hinweis

GitHub Packages unterstützt nur die Authentifizierung mit einem personal access token (classic). Weitere Informationen finden Sie 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) verwenden, um dich bei GitHub Packages oder der GitHub-API zu authentifizieren. 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) mit mindestens dem read:packages-Bereich für die Installation von Paketen, die anderen privaten Repositorys zugeordnet sind (GITHUB_TOKEN kann verwendet werden, wenn das Repository Lesezugriff auf das Paket enthält. Weitere Informationen findest du unter Konfigurieren der Zugriffssteuerung und Sichtbarkeit von Paketen).

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 finden Sie unter Einführung in GitHub-Pakete.

Um sich mit der dotnet-Befehlszeilenschnittstelle (CLI) bei GitHub Packages zu authentifizieren, erstellen Sie in Ihrem Projektverzeichnis eine nuget.config-Datei, in der GitHub Packages unter packageSources als Quelle für den dotnet-CLI-Client angegeben ist.

Dabei musst du Folgendes ersetzen:

  • USERNAME mit dem Namen Ihres persönlichen Kontos auf GitHub.
  • TOKEN mit Ihrem personal access token (classic).
  • NAMESPACE mit dem Namen des persönlichen Kontos oder der Organisation und dem bzw. der das Repository gehört, in dem Ihre Pakete gehostet werden.
  • HOSTNAME mit dem Hostnamen für Ihre GitHub Enterprise Server-Instance.

Wenn Ihre Instanz die Unterdomänenisolation aktiviert hat:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <packageSources>
        <clear />
        <add key="github" value="https://nuget.HOSTNAME/NAMESPACE/index.json" />
    </packageSources>
    <packageSourceCredentials>
        <github>
            <add key="Username" value="USERNAME" />
            <add key="ClearTextPassword" value="TOKEN" />
        </github>
    </packageSourceCredentials>
</configuration>

Wenn die Unterdomänenisolation für deine Instanz deaktiviert ist:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <packageSources>
        <clear />
        <add key="github" value="https://HOSTNAME/_registry/nuget/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 auf GitHub Packages veröffentlichen, indem Sie sich mit einer nuget.config-Datei authentifizieren, die Befehlszeilenoption --api-key mit Ihrem GitHubpersonal access token (classic) verwenden oder einen Befehl nutzen, der mithilfe der dotnet Befehlszeilenschnittstelle (CLI) direkt über die Befehlszeile ausgeführt werden kann.

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

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

Veröffentlichen eines Pakets mithilfe eines GitHub personal access token als API-Schlüssel

Wenn Sie noch kein personal access token für Ihr Konto auf GitHub haben, siehe Verwalten deiner persönlichen Zugriffstoken.

  1. Erstellen Sie ein neues Projekt. Ersetzen Sie PROJECT_NAME durch den Namen, den Sie dem project zuweisen möchten.

    dotnet new console --name PROJECT_NAME
    
  2. Verpacken Sie das Projekt.

    dotnet pack --configuration Release
    
  3. Veröffentlichen Sie das Paket mit Ihrem personal access token als API-Schlüssel. Ersetzen Sie PROJECT_NAME den Namen des Projekts durch 1.0.0 die Versionsnummer des Pakets und YOUR_GITHUB_PAT durch Ihr 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 finden Sie unter Pakete anzeigen.

Veröffentlichen eines Pakets mithilfe einer Datei nuget.config

Beim Veröffentlichen gilt: muss das OWNER des in Ihrer .csproj-Datei angegebenen Repositorys mit dem NAMESPACE übereinstimmen, das Sie in Ihrer nuget.config-Authentifizierungsdatei verwenden. 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.

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

  2. Erstellen Sie ein neues Projekt. Ersetzen Sie PROJECT_NAME durch den Namen, den Sie dem project zuweisen möchten.

    dotnet new console --name PROJECT_NAME
    
  3. Fügen Sie die spezifischen Informationen Ihres Projekts zur Datei Ihres Projekts hinzu, die auf .csproj endet. Stelle sicher, dass du Folgendes ersetzt:

    • 1.0.0 mit der Versionsnummer des Pakets.
    • OWNERmit dem Namen des persönlichen Benutzerkontos oder der Organisation, dem bzw. der das Repository gehört, in dem Sie Ihr Paket veröffentlichen möchten.
    • REPOSITORY mit dem Namen des Repositorys, mit dem Sie ihr Paket verbinden möchten.
    • HOSTNAME mit dem Hostnamen für Ihre GitHub Enterprise Server-Instance.
    <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://HOSTNAME/OWNER/REPOSITORY</RepositoryUrl>
      </PropertyGroup>
    
    </Project>
    
  4. Verpacken Sie das Projekt.

    dotnet pack --configuration Release
    
  5. Veröffentliche das Paket mit dem key, den du in der Datei nuget.config angegeben hast. Ersetzen Sie PROJECT_NAME durch den Namen des project, und ersetzen Sie 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 finden Sie unter Pakete anzeigen.

Veröffentlichen mehrerer Pakete im gleichen Repository

Um mehrere Pakete mit demselben Repository zu verbinden, verwenden Sie dieselbe GitHub Repository-URL in den RepositoryURL Feldern in allen CSPROJ-Projektdateien . GitHub stimmt anhand dieses Felds mit dem Repository überein.

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://HOSTNAME/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://HOSTNAME/my-org/my-repo</RepositoryUrl>
  </PropertyGroup>

</Project>

Installieren eines Pakets

Die Verwendung von Paketen aus GitHub Ihrem Projekt ähnelt der Verwendung von Paketen aus nuget.org. Fügen Sie Ihre Paketabhängigkeiten zu Ihrer CSPROJ-Datei hinzu, und geben Sie den Paketnamen und die Version an. Weitere Informationen zur Verwendung einer datei .csproj in Ihrem project finden Sie in der Microsoft-Dokumentation unter Working with NuGet packages.

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

  2. Um ein Paket zu verwenden, fügen Sie ItemGroup hinzu, und konfigurieren Sie das Feld PackageReference in der Datei .csproj project. 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://HOSTNAME/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

Ihr NuGet-Paket kann nicht pushen, wenn das RepositoryUrl in CSPROJ nicht auf das erwartete Repository festgelegt ist.

Wenn Sie eine Nuspec-Datei verwenden, stellen Sie sicher, dass sie über ein repository Element mit den erforderlichen type und url Attributen verfügt.

Wenn Sie ein GITHUB_TOKEN zur Authentifizierung bei einer GitHub Packages-Registry innerhalb eines GitHub Actions-Workflows verwenden, kann das Token nicht auf private, repositorybasierte Pakete in einem anderen Repository als dem zugreifen, in dem der Workflow ausgeführt wird. Um auf Pakete zuzugreifen, die anderen Repositorys zugeordnet sind, generieren Sie stattdessen einen personal access token (classic) mit dem read:packages Bereich, und übergeben Sie dieses Token als geheim.

Zeitweilige 403 Fehler beim Wiederherstellen öffentlicher Pakete

Wenn Sie GitHub Packages zusammen mit nuget.org verwenden und bei der Wiederherstellung standardmäßiger öffentlicher Pakete (wie Microsoft.Extensions.*) zeitweise Fehler vom Typ 403 „Forbidden“ auftreten, kann dies daran liegen, dass NuGet für jedes Paket alle konfigurierten Paketquellen abfragt. Wenn die Authentifizierung bei GitHub Packages vorübergehend fehlschlägt, kann dies die gesamte Wiederherstellung blockieren – auch für Pakete, die auf GitHub Packages nicht vorhanden sind.

Um dies zu vermeiden, verwenden Sie die NuGet-Paketquellzuordnung , um Pakete an bestimmte Quellen weiterzuleiten.

Ersetzen Sie:

  • NAMESPACE mit dem Namen des persönlichen Kontos oder der Organisation, das Ihren GitHub Packages NuGet-Feed besitzt.
  • PACKAGE-ID-PREFIX mit dem NuGet-Paket-ID-Präfix, das Sie für Pakete verwenden, die auf GitHub Packages gehostet werden. Wenn Sie mehrere Präfixe verwenden, fügen Sie zusätzliche <package> Einträge für jedes Präfix hinzu.
  • HOSTNAME mit dem Hostnamen für Ihre GitHub Enterprise Server-Instance.

Wenn Ihre Instanz die Unterdomänenisolation aktiviert hat:

<configuration>
    <packageSources>
        <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
        <add key="github" value="https://nuget.HOSTNAME/NAMESPACE/index.json" />
    </packageSources>
    <packageSourceMapping>
        <packageSource key="nuget.org">
            <package pattern="*" />
        </packageSource>
        <packageSource key="github">
            <package pattern="PACKAGE-ID-PREFIX.*" />
        </packageSource>
    </packageSourceMapping>
</configuration>

Wenn die Unterdomänenisolation für deine Instanz deaktiviert ist:

<configuration>
    <packageSources>
        <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
        <add key="github" value="https://HOSTNAME/_registry/nuget/NAMESPACE/index.json" />
    </packageSources>
    <packageSourceMapping>
        <packageSource key="nuget.org">
            <package pattern="*" />
        </packageSource>
        <packageSource key="github">
            <package pattern="PACKAGE-ID-PREFIX.*" />
        </packageSource>
    </packageSourceMapping>
</configuration>

NuGet verwendet das spezifischste übereinstimmende Muster, sodass Pakete, die mit PACKAGE-ID-PREFIX.* übereinstimmen, nur von GitHub Packages abgerufen werden, während alle anderen Pakete von nuget.org abgerufen werden. Dies trägt auch dazu bei, Dependency-Confusion-Angriffe zu verhindern, indem sichergestellt wird, dass Ihre privaten Pakete nur von Ihrem GitHub Packages-Feed stammen können.

Weitere Informationen