从命令行发布 NuGet 包(dotnet)

Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022

本指南指导你配置项目以使用 dotnet 命令行接口发布 NuGet 包。

先决条件

产品 要求
Azure DevOps - An Azure DevOps 组织
- Azure DevOps 项目
- Azure Artifacts
- 下载并安装 .NET SDK 版本 9.0.200 或更高版本。

配置 Azure Artifacts 凭据提供程序

若要对你的源进行身份验证,必须先安装 Azure Artifacts Credential Provider。 使用 dotnet 附带的工具安装程序,可以使用以下命令从 CLI 安装凭据提供程序:

dotnet tool install --global Microsoft.Artifacts.CredentialProvider.NuGet.Tool

如果存储库级nuget.config配置为仅使用Azure Artifacts源,请从该目录外部运行 install 命令,或将 nuget.org 显式设置为源:

dotnet tool install --global Microsoft.Artifacts.CredentialProvider.NuGet.Tool --source https://api.nuget.org/v3/index.json

(可选)将该工具固定为某个主版本(例如,在对可复现性要求较高的容器镜像中):

dotnet tool install --global Microsoft.Artifacts.CredentialProvider.NuGet.Tool --version 2.* --source https://api.nuget.org/v3/index.json

第一个用法

首次执行需要身份验证的操作时,请使用以下方法之一:

  1. 运行命令 --interactive ,以便 dotnet 提示你登录。 这是大多数本地开发方案的建议方法。

运行交互式命令之前,请确保项目已设置,并将源添加到 nuget.config。有关设置详细信息,请参阅 项目设置

完成项目设置并将其连接到数据馈送后,前往项目目录,然后运行:

dotnet restore --interactive

此命令会使您登录并获取一个会话令牌。 登录成功后,在缓存的会话令牌仍然有效期间,您无需使用 --interactive 即可运行需身份验证的命令。 有关详细信息,请参阅 Session 令牌缓存位置

  1. 对于非交互式方案(如 Docker 容器和自定义自动化),请通过 environment 变量提供凭据。

对于 Azure Pipelines,请在运行 dotnet restoredotnet nuget push 等命令之前,使用 NuGetAuthenticate@1 任务向你的源进行身份验证。 有关更多详细信息,请参阅使用 Azure Pipelines 还原 NuGet 包

创建信息流

如果已有源,请转到下一步。 否则,请按照下面的说明创建新的:

  1. 登录到 Azure DevOps 并导航到项目。

  2. 选择“项目”,然后选择“创建源”

  3. 为你的源输入一个描述性名称,并设置其可见性(哪些人可以使用你的源)。 指定你的源范围,如果希望包含来自常见公共源的包,请选中包含常见公共源中的包复选框。

  4. 完成操作后,选择“创建”

连接到源

在发布包到馈送之前,您必须通过 Azure Artifacts 进行身份验证。 按照以下说明设置您的项目并使用您的 feed 源进行身份验证:

  1. 登录到 Azure DevOps 组织,然后导航到项目。

  2. 选择“ 项目”,然后从下拉菜单中选择源。

  3. 选择“连接到源”,然后从左侧的“NuGet”部分中选择“dotnet”

  4. 在与 csprojsln 文件相同的文件夹中创建 nuget.config 文件。 复制以下 XML 代码片段并将其粘贴到新文件中,将占位符替换为相关信息:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <clear />
    <add key="<FEED_NAME>" value="https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" />
  </packageSources>
</configuration>
  1. 登录到 Azure DevOps 服务器,然后导航到项目。

  2. 选择“项目”,然后选择源。

  3. 选择连接到源,然后从左侧导航窗格中选择 dotnet

  4. 按照项目设置部分中的说明连接到源。

    显示如何在 Azure DevOps Server 2020 和 2022 中使用 dotnet 连接到源的屏幕截图。

将包发布到同一组织中的源

运行以下命令,将包发布到源。 将占位符替换为相应的值:

dotnet nuget push --source https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json --api-key <ANY_STRING> <PACKAGE_PATH> 

示例

dotnet nuget push --source https://pkgs.dev.azure.com/MyOrg/MyProject/_packaging/MyFeed/nuget/v3/index.json --api-key AZ bin/MyPackage.5.0.2.nupkg

注意

要发布到 Azure Artifacts 源时,必需提供api-key 参数,但其值可以使用任意字符串。

将包发布到其他组织的馈送

若要将 NuGet 包发布到其他 Azure DevOps 组织中的源,必须先在目标组织中创建个人访问令牌(PAT),将新的包源添加到配置文件,然后运行发布命令:

  1. 导航到托管目标源的组织,并使用打包>范围来创建p个人访问令牌 (PAT)。

  2. <PERSONAL_ACCESS_TOKEN> 占位符替换为个人访问令牌,然后运行以下命令将包源添加到 nuget.config 文件。 确保此文件的安全存储,并且不要在源控制中选中它。

    dotnet nuget add source https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json --name <SOURCE_NAME> --username <USER_NAME> --password <PERSONAL_ACCESS_TOKEN> --configfile <PATH_TO_NUGET_CONFIG_FILE>
    
  3. 运行以下命令以发布包:

    dotnet nuget push --source <SOURCE_NAME> --api-key <ANY_STRING> <PACKAGE_PATH>
    

示例

dotnet nuget add source https://pkgs.dev.azure.com/MyOrg/MyProject/_packaging/MyFeed/nuget/v3/index.json --name MySource --username MyUserName --password MyPersonalAccessToken --configfile ./nuget.config

dotnet nuget push --source MySource --api-key AZ nupkgs/mypackage.1.1.0.nupkg

注意

如果贵组织使用防火墙或代理服务器,请确保 Azure Artifacts 域的 URL 和 IP 地址 已被允许通过。