使用 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 AE 。

注:安装或发布 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 替换为 您的企业 的主机名。
<?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>

发布包

您可以通过使用 nuget.config 文件进行身份验证或使用包含 GitHub 个人访问令牌 (PAT) 的 --api-key 命令行选项,向 GitHub Packages 发布包。

使用 GitHub PAT 作为 API 密钥发布包

如果您还没有用于 GitHub 帐户的 PAT,请参阅“创建个人访问令牌”。

  1. 创建一个新项目。

    dotnet new console --name OctocatApp
  2. 打包项目。

    dotnet pack --configuration Release
  3. 使用您的 PAT 作为 API 密钥发布包。

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

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

使用 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 替换为 您的企业 的主机名。
    <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 包可能无法推送。

延伸阅读

此文档对您有帮助吗?

隐私政策

帮助我们创建出色的文档!

所有 GitHub 文档都是开源的。看到错误或不清楚的内容了吗?提交拉取请求。

做出贡献

或, 了解如何参与。