此版本的 GitHub Enterprise 已停止服务 2021-09-23. 即使针对重大安全问题,也不会发布补丁。 要获得更好的性能、改进的安全性和新功能,请升级到 GitHub Enterprise 的最新版本。 如需升级方面的帮助,请联系 GitHub Enterprise 支持

使用 NuGet 注册表

您可以配置 dotnet 命令行接口 (CLI) 以将 NuGet 包发布到 GitHub Packages 并将存储在 GitHub Packages 上的包用作 .NET 项目中的依赖项。

GitHub Packages 可用于 GitHub Free、GitHub Pro、组织的 GitHub Free、GitHub Team、GitHub Enterprise Cloud、GitHub Enterprise Server 和 GitHub AE。

注: GitHub Packages 目前正在测试用于 GitHub Enterprise Server 2.22。 要加入 您的 GitHub Enterprise Server 实例 的测试版,请使用注册表单

注:安装或发布 Docker 映像时,GitHub Packages 当前不支持外部图层,如 Windows 映像。

向 GitHub Packages 验证

您需要访问令牌才能发布、安装和删除 GitHub Packages 中的包。

您可以使用个人访问令牌 (PAT) 向 GitHub Packages 或 GitHub API 验证。 创建个人访问令牌时,可根据需要为令牌分配不同的作用域。 有关 PAT 与包相关的域的更多信息,请参阅“关于 GitHub Packages 的权限”。

要在 GitHub Actions 工作流程内向 GitHub Packages 注册表验证,您可以使用:

  • GITHUB_TOKEN 来发布与工作流程仓库相关联的包。
  • PAT 来安装与其他私有仓库(GITHUB_TOKEN 无法访问)相关联的包。

在 GitHub Actions 中使用 GITHUB_TOKEN 进行身份验证

在 GitHub Actions 工作流程中通过以下命令使用 GITHUB_TOKEN 向 GitHub Packages 验证,而不是对仓库的 nuget.config 文件中的令牌进行硬编码。

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

有关 GitHub Actions 工作流程中使用的 GITHUB_TOKEN 的更多信息,请参阅“工作流程中的身份验证”。

使用个人访问令牌进行身份验证

您必须使用具有适当范围的个人访问令牌才可在 GitHub Packages 中发布和安装。 更多信息请参阅“关于 GitHub Packages”。

要使用 dotnet 命令行接口 (CLI) 向 GitHub Packages 验证,请在项目目录中创建一个 nuget.config 文件,将 GitHub Packages 指定为 dotnet CLI 客户端的 packageSources 下的源。

必须:

  • USERNAME 替换为您在 GitHub 上的用户帐户的名称。
  • TOKEN 替换为您的个人访问令牌。
  • OWNER 替换为拥有项目所在仓库的用户或组织帐户的名称。
  • HOSTNAME 替换为 您的 GitHub Enterprise Server 实例 的主机名。

如果您的实例启用了子域隔离:

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

例如,OctodogAppOctocatApp 项目将发布到同一个仓库:

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

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.0</TargetFramework>
    <PackageId>OctodogApp</PackageId>
    <Version>1.0.0</Version>
    <Authors>Octodog</Authors>
    <Company>GitHub</Company>
    <PackageDescription>This package adds an Octodog!</PackageDescription>
    <RepositoryUrl>https://github.com/octo-org/octo-cats-and-dogs</RepositoryUrl>
  </PropertyGroup>

</Project>

发布包

您可以通过使用 nuget.config 文件进行身份验证。

使用 nuget.config 文件发布包

发布时,您需要将 csproj 文件中的 OWNER 值用于您的 nuget.config 身份验证文件。 在 .csproj 文件中指定或增加版本号,然后使用 dotnet pack 命令创建该版本的 .nuspec 文件。 有关创建包的更多信息,请参阅 Microsoft 文档中的“创建和发布包”。

  1. 向 GitHub Packages 验证。 更多信息请参阅“向 GitHub Packages 验证”。

  2. 创建一个新项目。

    dotnet new console --name OctocatApp
  3. 将项目的特定信息添加到以 .csproj 结尾的项目文件中。 必须:

    • OWNER 替换为拥有项目所在仓库的用户或组织帐户的名称。
    • REPOSITORY 替换为要发布的包所在仓库的名称。
    • 1.0.0 替换为包的版本号。
    • HOSTNAME 替换为 您的 GitHub Enterprise Server 实例 的主机名。
    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp3.0</TargetFramework>
        <PackageId>OctocatApp</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>
    
    </Project>
    
  4. 打包项目。

    dotnet pack --configuration Release
  5. 使用您在 nuget.config 文件中指定的 key 发布包。

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

在发布包后,您可以在 GitHub 上查看该包。 更多信息请参阅“查看包”。

将多个包发布到同一个仓库

要将多个包发布到同一个仓库,您可以在所有 .csproj 项目文件的 RepositoryURL 字段中包含相同的 GitHub 仓库 URL。 GitHub 根据该字段匹配仓库。

例如,OctodogAppOctocatApp 项目将发布到同一个仓库:

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

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.0</TargetFramework>
    <PackageId>OctodogApp</PackageId>
    <Version>1.0.0</Version>
    <Authors>Octodog</Authors>
    <Company>GitHub</Company>
    <PackageDescription>This package adds an Octodog!</PackageDescription>
    <RepositoryUrl>https://HOSTNAME/octo-org/octo-cats-and-dogs</RepositoryUrl>
  </PropertyGroup>

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

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.0</TargetFramework>
    <PackageId>OctocatApp</PackageId>
    <Version>1.0.0</Version>
    <Authors>Octocat</Authors>
    <Company>GitHub</Company>
    <PackageDescription>This package adds an Octocat!</PackageDescription>
    <RepositoryUrl>https://HOSTNAME/octo-org/octo-cats-and-dogs</RepositoryUrl>
  </PropertyGroup>

</Project>

安装包

在项目中使用来自 GitHub 的包类似于使用来自 nuget.org 的包。 将包依赖项添加到 .csproj 文件以指定包名称和版本。 有关在项目中使用 .csproj 文件的更多信息,请参阅 Microsoft 文档中的“使用 NuGet 包”。

  1. 向 GitHub Packages 验证。 更多信息请参阅“向 GitHub Packages 验证”。

  2. 要使用包,请添加 ItemGroup 并配置 .csproj 项目文件中的 PackageReference 字段,将 OctokittenApp 包替换为您的包依赖项,将 1.0.0 替换为您要使用的版本:

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp3.0</TargetFramework>
        <PackageId>OctocatApp</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="OctokittenApp" Version="12.0.2" />
      </ItemGroup>
    
    </Project>
    
  3. 使用 restore 命令安装包。

    dotnet restore

疑难解答

如果 .csproj 中的 RepositoryUrl 未设置为预期的仓库,则 NuGet 包可能无法推送。

延伸阅读