Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022 |Azure DevOps Server 2020
本文介绍如何使用 Azure Pipelines 来处理 .NET Core 项目。 本文将指导你完成以下任务:
- 创建 .NET Core Web 应用并将其上传到 GitHub 存储库。
- 创建 Azure DevOps 项目和 Azure Pipelines 管道以生成项目。
- 使用自承载代理设置生成环境。
- 还原依赖项,生成项目,并使用 .NET Core (DotNetCoreCLI@2) 任务或脚本进行测试。
- 使用 .NET Core (DotNetCoreCLI@2) 任务将其他 .NET SDK 命令添加到管道。
- 使用 发布代码覆盖率结果 (Publish code coverage results v2) 任务发布代码覆盖率结果。
- 打包生成输出并将其传递到管道、NuGet 源、ZIP 存档或其他目标。
- 创建 .NET Core Web 应用并将其上传到 GitHub 存储库。
- 创建 Azure DevOps 项目和 Azure Pipelines 管道以生成项目。
- 使用Microsoft托管或自承载代理设置生成环境。
- 还原依赖项,生成项目,并使用 .NET Core (DotNetCoreCLI@2) 任务或脚本进行测试。
- 使用 .NET Core (DotNetCoreCLI@2) 任务将其他 .NET SDK 命令添加到管道。
- 使用 发布代码覆盖率结果 (Publish code coverage results v2) 任务发布代码覆盖率结果。
- 打包生成输出并将其传递到管道、NuGet 源、ZIP 存档或其他目标。
注意
若要使用 .NET Framework 项目,请参阅 使用 .NET Framework 生成 ASP.NET 应用。
先决条件
若要完成本文中的所有过程,需要满足以下先决条件:
- Azure DevOps 组织。 可以免费创建一个帐户。
- 组织 项目管理员组中的成员身份,因此可以创建 Azure DevOps 项目并授予项目对管道的访问权限。 Azure DevOps 组织所有者自动拥有此成员身份。
- 组织中的 Azure DevOps 项目。 在 Azure DevOps 中创建项目。
- 通过请求免费层并行作业,在Microsoft托管的代理上运行管道的功能。 此请求可能需要数个工作日才能处理。 有关详细信息,请参阅配置并行作业并为其付费。
- 服务连接的管理员或创建者角色,你可以将其分配为项目管理员。
- GitHub 帐户和存储库。
若要完成本文中的所有过程,需要满足以下先决条件:
- Azure DevOps 集合。
- 在组织中创建的 Azure DevOps 项目。 有关说明,请参阅 在 Azure DevOps 中创建项目。
- 项目管理员组中的成员身份,因此可以创建 Azure DevOps 项目并授予项目对管道的访问权限。 Azure DevOps 组织所有者自动拥有此成员身份。
- 服务连接的管理员或创建者角色,你可以将其分配为项目管理员。
- GitHub 帐户和存储库。
创建 .NET 项目并将其上传到 GitHub
如果想要在 GitHub 存储库中使用 .NET 项目,可以跳过本部分。
如果没有要使用的 .NET 项目,请在本地计算机上创建一个新项目,如下所示:
- 安装 .NET 8.0 SDK,或确保已安装它。
- 在本地计算机上打开终端窗口。
- 创建项目目录,然后转到此目录。
- 通过运行 dotnet new webapp -f net8.0创建新的 .NET 8 Web 应用。
- 使用 dotnet run.. 在本地生成并运行应用程序。
- 应用程序启动时,按 Ctrl+C 将其关闭。
- 将本地项目上载或连接到 GitHub 存储库。
创建管道
如果有要使用的管道,可以跳过本部分。 否则,可以使用 YAML 管道编辑器或经典编辑器创建管道,如下所示:
- 在 Azure DevOps 项目中,从左侧导航菜单中选择 “管道 ”。 
- 如果此管道是项目中的第一个管道,请选择“ 新建管道 ”或 “创建管道 ”。 
- 在 代码屏幕的“位置” 上,选择 “GitHub”。 
- 可能会重定向到 GitHub 进行登录。 如果是这样,请输入 GitHub 凭据。 
- 在 “选择存储库 ”屏幕上,选择 .NET 应用位于的存储库。 
- 你可能会被重定向到 GitHub 来安装 Azure Pipelines 应用。 如果是,请选择批准并安装。 
- 在“ 配置 ”选项卡上,选择“ 显示更多 ”,然后从列表中选择 ASP.NET 核心 管道模板。 此模板提供了本文介绍的许多步骤和设置。 - 还可以在“配置”选项卡上选择“初学者”管道,以从最小管道开始,并自行添加步骤和设置。 
- 在“ 审阅 ”选项卡上,检查 YAML 代码。 可以根据要求自定义文件。 例如,可以指定不同的代理池或添加任务来安装其他 .NET SDK。 
- 在 Azure DevOps 项目中,从左侧导航菜单中选择 “管道 ”。 
- 如果此管道是项目中的第一个管道,请选择“ 新建管道 ”或 “创建管道 ”。 
- 选择源存储库类型。 对于此示例,请使用 GitHub Enterprise Server。 
- 在下一个屏幕上,输入以下信息: - GitHub 帐户的 URL,例如 https://github.com/myname。
- GitHub 个人访问令牌(PAT)。
- 服务连接名称,例如 my-github。
 
- GitHub 帐户的 URL,例如 
- 选择创建。 
- 选择你的 GitHub 存储库。 
- 在配置选项卡上,选择显示更多,然后从列表中选择 ASP.NET Core 管道模板。 此模板提供了本文介绍的许多步骤和设置。 
- 检查新的 YAML 管道代码。 可根据自己的要求自定义 YAML 文件。 例如,可以添加 一个任务来安装其他 .NET SDK 或测试和发布项目。 
- 准备就绪后,选择保存并运行。   
- (可选)编辑 提交消息,然后选择“ 保存”并再次运行 。 
- 在“ 摘要 ”选项卡上,选择“ 作业 ”部分中的作业,以监视管道的作。 
现在,你已准备好一个可自定义的工作管道。
设置生成环境
Azure Pipelines 使用 自承载代理 生成 .NET Core 项目。 可以在 Windows、 Linux、 macOS 或 Docker 代理上使用 .NET Core SDK 和运行时。 请确保在代理上安装了所需版本的 .NET Core SDK 和运行时。
若要安装特定版本的 .NET SDK,请将 UseDotNet@2 任务添加到 YAML 管道文件或在经典编辑器 中使用 .NET Core 任务。
注意
对于在物理系统上运行的代理,通过管道安装 SDK 和工具会更改代理主机上的生成环境。
以下示例 YAML 代码片段安装 .NET SDK 8.0.x:
steps:
- task: UseDotNet@2
  inputs:
    version: '8.x'
若要安装较新的 SDK,请设置为 performMultiLevelLookuptrue.
steps:
- task: UseDotNet@2
  displayName: 'Install .NET Core SDK'
  inputs:
    version: 8.x
    performMultiLevelLookup: true
    includePreviewVersions: true # Required for preview versions
可为生成作业选择代理池和代理。 还可以根据代理的功能指定代理。 例如,以下 YAML 管道代码段选择池和代理功能。
pool:
  name: myPrivateAgents
  demands:
  - agent.os -equals Darwin
  - anotherCapability -equals somethingElse
可以使用适用于 Windows、Linux 或 macOS 的 .NET Core SDK 和运行时生成 .NET Core 项目。 默认情况下,生成在 Microsoft托管代理上运行,因此无需设置基础结构。
Azure Pipelines Microsoft 托管代理包括多个预安装的 .NET Core SDK 版本。 有关可用映像和配置示例的完整列表,请参阅 Microsoft托管代理 。
以下 YAML 管道代码片段设置代理池的 Ubuntu OS。
pool:
  vmImage: 'ubuntu-latest' 
Microsoft托管代理不包含 .NET Core SDK 的某些旧版本,并且通常不包括预发行版版本。 如果需要Microsoft托管代理上的这些版本的 SDK,可以使用 Use DotNet (UseDotNet@2) 任务安装它们。
例如,以下代码安装 .NET 5.0.x SDK:
steps:
- task: UseDotNet@2
  inputs:
    version: '5.x'
Windows 代理已包含 .NET Core 运行时。 若要安装较新的 SDK,请 performMultiLevelLookup 设置为 true 以下代码片段中所示:
steps:
- task: UseDotNet@2
  displayName: 'Install .NET Core SDK'
  inputs:
    version: 8.x
    performMultiLevelLookup: true
    includePreviewVersions: true # Required for preview versions
自托管代理
或者,可以使用 自承载代理 来生成 .NET Core 项目。 可以设置 Linux、 macOS 或 Windows 自承载代理。
使用自承载代理可以:
- 避免运行 UseDotNet@2工具安装程序的成本。
- 如果拥有大型存储库,请缩短生成时间。
- 运行增量生成。
- 使用Microsoft不支持的预览版或专用 SDK。
- 使用仅在企业或本地环境中可用的 SDK。
有关详细信息,请参阅自托管代理。
还原依赖项
NuGet 包是项目依赖未生成的代码的一种方式。 可以通过通过 dotnet restore 任务或管道中的脚本运行DotNetCoreCLI@2命令来下载 NuGet 包和特定于项目的工具。 该 dotnet restore 命令使用打包到 .NET Core SDK 中的 NuGet.exe ,并且只能还原 .NET Core 项目 *.csproj 文件中指定的包。
可以使用 .NET Core (DotNetCoreCLI@2) 任务从 Azure Artifacts、NuGet.org 或其他经过身份验证的外部或内部 NuGet 存储库下载和还原 NuGet 包。 如果 NuGet 源与管道位于同一项目中,则无需进行身份验证。 有关详细信息,请参阅 .NET Core 任务 (DotNetCoreCLI@2)。
使用 Microsoft 托管代理时,每次运行生成时都会获得一个新计算机,而它会在每次运行时还原这些包。 还原可能会花费大量时间。 若要缓解此问题,请使用 Azure Artifacts 或 自承载代理 来利用包缓存。
以下管道使用 DotNetCoreCLI@2 任务还原 Azure Artifact 源。
trigger:
- main
pool:
  vmImage: 'windows-latest'
steps:
- task: UseDotNet@2
  displayName: 'Install .NET Core SDK'
  inputs:
    version: 8.x
    performMultiLevelLookup: true
    includePreviewVersions: true # Required for preview versions
variables:
  buildConfiguration: 'Release'
steps:
- task: DotNetCoreCLI@2
  inputs:
    command: 'restore'
    feedsToUse: 'select'
    vstsFeed: 'my-vsts-feed' # A series of numbers and letters
- task: DotNetCoreCLI@2
  inputs:
    command: 'build'
    arguments: '--configuration $(buildConfiguration)'
  displayName: 'dotnet build $(buildConfiguration)'
在 .NET Core SDK 版本 2.0 及更新版本中,运行命令(例如 dotnet build)时,包会自动还原。 如果使用经过身份验证的源,仍需要使用 .NET Core (DotNetCoreCLI@2) 任务来还原包。
通过在项目设置>管道服务连接中创建 NuGet 服务连接来管理经过身份验证的源>凭据。 有关 NuGet 服务连接的详细信息,请参阅 使用 Azure Pipelines 发布 NuGet 包。
从 NuGet.org 还原包
若要从 NuGet.org 还原包,请按如下所示更新管道。
可以通过直接编辑 YAML 代码或使用任务助手将还原命令添加到管道。
通过将以下代码片段插入到生成任务之前azure-pipelines.yml文件中,直接添加 DotNetCoreCLI@2 () 任务。
steps:
- task: DotNetCoreCLI@2
  displayName: Restore
  inputs:
    command: restore
    projects: '**/*.csproj'
    feedsToUse: select
若要使用任务助手,请执行以下操作:
- 转到 YAML 文件中要插入此任务的位置。
- 从任务目录选择 .NET Core。
- 在配置屏幕上,从“命令”下拉列表中选择“还原”。
- 在 “项目路径”或“解决方案” 字段中,输入 *.csproj 文件的路径。 可以将通配符 **/*.csproj 用于所有子文件夹中的所有 *.csproj 文件。
- 要 添加源,请确保 选中“源”, 并选择“ 使用来自 NuGet.org 的包 ”。
- 选择 添加 。
- 选择“ 验证并保存”,然后选择“ 保存” 以提交更改。
从外部源还原包
若要指定外部 NuGet 存储库,请将 URL 放在存储库中的 NuGet.config 文件中。 请确保 NuGet.config 文件中指定了任何自定义源,并在 NuGet 服务连接中指定了凭据。
若要从外部源还原包,请按上一节中的说明添加 restore 任务,但按如下所示更改配置设置:
通过将以下代码片段插入到生成任务之前azure-pipelines.yml文件中,直接添加 DotNetCoreCLI@2 () 任务。 替换为 <NuGet service connection> 服务连接名称。
steps:
- task: DotNetCoreCLI@2
  displayName: Restore
  inputs:
    command: restore
    projects: '**/*.csproj'
    feedsToUse: config
    nugetConfigPath: NuGet.config    # Relative to root of the repository
    externalFeedCredentials: <NuGet service connection>
若要使用任务助手,请执行以下操作:
- 添加 .NET Core 任务,并在配置屏幕上选择 还原 ,如前面的过程所示。
- 要 添加源,请在 我的 NuGet.config中选择“源 ”。
- 在 NuGet.config路径 下,输入 NuGet.config 文件的路径,相对于存储库的根目录。 可以选择字段旁边的省略号 ... ,以浏览到并选择位置。
- 在此 组织/集合外部源的凭据下,选择要用于所选 NuGet.config 文件中外部注册表的凭据。 对于同一组织中的源,可以将此字段留空。 将自动使用生成的凭据。
还原 .NET Framework 项目的包
如果解决方案中还有Microsoft .NET Framework 项目或使用 package.json 指定依赖项,请使用 NuGetCommand@2 任务还原这些依赖项。
- task: NuGetCommand@2
  inputs:
    command: 'restore'
    restoreSolution: '**/*.sln'
    feedsToUse: 'select'
注意
对于 Ubuntu 24.04 或更高版本,必须使用 NuGetAuthenticate 任务,而不是将 NuGetCommand@2 任务与 .NET CLI 配合使用。 有关详细信息,请参阅 对较新的 Ubuntu 托管映像的支持。
生成项目
通过运行 dotnet build 命令生成 .NET Core 项目。 可以使用 .NET Core (DotNetCoreCLI@2) 任务或命令行脚本将命令添加到管道。
使用 .NET Core 任务
可以使用 YAML 管道编辑器添加生成任务,方法是直接编辑文件或使用任务助手。
通过插入以下代码片段直接添加 .NET Core (DotNetCoreCLI@2) 任务。 
              arguments更新以满足需求。
steps:
- task: DotNetCoreCLI@2
  displayName: Build
  inputs:
    command: build
    projects: '**/*.csproj'
    arguments: '--configuration $(buildConfiguration)'
若要使用任务助手,请执行以下操作:
- 转到 YAML 文件中要插入此任务的位置。
- 选择 .NET Core (DotNetCoreCLI@2) 任务。
- 从“命令”下拉列表中选择“生成”。
- 在 “项目路径”或“解决方案” 字段中,输入 *.csproj 文件的路径。 可以将通配符 **/*.csproj 用于所有子文件夹中的所有 *.csproj 文件。
- 选择 添加 。
- 选择保存以提交此更改。
使用命令行脚本生成 .NET Core
还可以使用命令行脚本进行生成。
若要通过直接编辑 YAML 文件来添加生成命令行,请添加以下代码:
steps:
- script: dotnet build --configuration $(buildConfiguration)
  displayName: 'dotnet build $(buildConfiguration)'
还可以使用任务助手添加 命令行 任务。
- 转到 YAML 文件中要插入此任务的位置。
- 从列表中选择 命令行 (CmdLine@2) 任务。
- 在 “脚本 ”字段中,输入包含参数的 dotnet build命令。 例如,dotnet build --configuration $(buildConfiguration)。
- 在 “高级>工作目录”下,输入 *.csproj 文件的路径作为工作目录。 如果将其留空,则工作目录默认为 $(Build.SourcesDirectory)。
- 选择 添加 。
- 选择保存以提交此更改。
将其他 .NET SDK 命令添加到管道
可以使用 .NET Core (DotNetCoreCLI@2) 任务或脚本将其他 .NET SDK 命令添加到管道。
使用 .NET Core 任务添加 .NET CLI 命令
              使用 .NET Core (DotNetCoreCLI@2) 任务,可以轻松地将 .NET CLI 命令添加到管道。 可以通过编辑 YAML 文件或使用经典编辑器来添加 .NET Core (DotNetCoreCLI@2) 任务。
若要使用 YAML 管道编辑器中的任务助手添加 .NET Core 命令,请执行以下步骤:
- 转到 YAML 文件中要插入此任务的位置。
- 从任务目录选择 .NET Core。
- 从命令字段中的下拉列表中选择要运行的 命令 。
- 配置所需的所有选项。
- 选择 添加 。
- 选择保存以提交此更改。
在脚本中添加 .NET Core CLI 命令
可以在script文件中添加 .NET Core CLI 命令。 例如:
steps:
# ...
- script: dotnet test <test-project> 
安装工具
若要在 Windows 上运行的版本中安装 .NET Core 全局工具(如 dotnetsay ),请添加 .NET Core 任务并在配置中设置以下属性:
- 命令: 自定义
- 项目路径:留空
- 
              自定义命令: tool
- 
              参数: install -g dotnetsay
若要运行该工具,请添加命令行任务并在dotnetsay”字段中输入。
运行测试
在存储库中有测试项目时,可以使用 .NET Core (DotNetCoreCLI@2) 任务通过 MSTest、xUnit 和 NUnit 等测试框架来运行单元测试。 测试项目必须引用 Microsoft.NET.Test.SDK 版本 15.8.0 或更高版本。
测试结果会自动发布到服务,可在生成摘要中获取。 可以使用测试结果对失败的测试进行故障排除,并分析测试计时。
若要将测试任务添加到管道,请将以下代码片段添加到 azure-pipelines.yml 文件:
steps:
# ...
# do this after other tasks such as build
- task: DotNetCoreCLI@2
  inputs:
    command: test
    projects: '**/*Tests/*.csproj'
    arguments: '--configuration $(buildConfiguration)'
如果使用任务助手添加 .NET Core (DotNetCoreCLI@2) 任务,请设置以下属性:
- 命令: 测试
- 项目路径:设置为解决方案中的测试项目
- 
              参数: --configuration $(BuildConfiguration)
或者,可以使用特定的记录器运行 dotnet test 命令,然后使用 PublishTestResults@2 该任务:
steps:
# ...
# do this after your tests run
- script: dotnet test <test-project> --logger trx
- task: PublishTestResults@2
  condition: succeededOrFailed()
  inputs:
    testRunner: VSTest
    testResultsFiles: '**/*.trx'
收集代码覆盖率
在 Windows 平台上生成时,可以使用内置覆盖率数据收集器来收集代码覆盖率指标。 测试项目必须引用 Microsoft.NET.Test.SDK 版本 15.8.0 或更高版本。
使用 .NET Core (DotNetCoreCLI@2) 任务运行测试时,覆盖率数据会自动发布到服务器。 可以从生成摘要下载 *.coverage 文件,以在 Visual Studio 中查看。
若要收集代码覆盖率,请在将测试任务添加到管道时添加 --collect "Code Coverage" 参数。
steps:
# ...
# do this after other tasks such as build
- task: DotNetCoreCLI@2
  inputs:
    command: test
    projects: '**/*Tests/*.csproj'
    arguments: '--configuration $(buildConfiguration) --collect "Code Coverage"'
如果使用任务助手添加 .NET Core (DotNetCoreCLI@2) 任务,请设置以下属性:
- 命令: 测试
- 项目路径:设置为解决方案中的测试项目
- 
              参数: --configuration $(BuildConfiguration) --collect "Code Coverage"
确保发布测试结果选项保持选中状态。
或者,若要使用 dotnet test 具有特定记录器的命令来收集代码覆盖率结果,然后运行 PublishTestResults@2 任务,请使用以下代码:
steps:
# ...
# do this after your tests run
- script: dotnet test <test-project> --logger trx --collect "Code Coverage"
- task: PublishTestResults@2
  inputs:
    testRunner: VSTest
    testResultsFiles: '**/*.trx'
使用 Coverlet 收集代码覆盖率指标
如果在 Linux 或 macOS 上生成,则可以使用 Coverlet 或类似工具来收集代码覆盖率指标。
可以使用 发布代码覆盖率结果(PublishCodeCoverageResults@2)任务将代码覆盖率 结果发布到服务器。 必须配置覆盖率工具以 Cobertura 或 JaCoCo 覆盖率格式生成结果。
若要使用 Coverlet 运行测试和发布代码覆盖率,
- 添加对 coverlet.collectorNuGet 包的引用。
- 将以下代码片段添加到 azure-pipelines.yml 文件:
- task: DotNetCoreCLI@2
  displayName: 'dotnet test'
  inputs:
    command: 'test'
    arguments: '--configuration $(buildConfiguration) --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=cobertura'
    publishTestResults: true
    projects: '<test project directory>'
  
- task: PublishCodeCoverageResults@2
  displayName: 'Publish code coverage report'
  inputs:
    codeCoverageTool: 'Cobertura'
    summaryFileLocation: '$(Agent.TempDirectory)/**/coverage.cobertura.xml'
打包和交付代码
若要打包和交付生成输出,可以:
- 将生成项目发布到 Azure Pipelines。
- 创建 NuGet 包并将其发布到 NuGet 源。
- 将 NuGet 包发布到 Azure Artifacts。
- 创建 ZIP 存档以部署到 Web 应用。
- 将符号发布到 Azure Artifacts 符号服务器或文件共享。
还可为应用生成映像,并将其推送到容器注册表。
将工件发布到 Azure Pipelines
若要将 .NET 生成的输出发布到管道,请执行以下步骤。
- 使用 .NET CLI 运行dotnet publish --output $(Build.ArtifactStagingDirectory),或使用发布命令添加DotNetCoreCLI@2() 任务。
- 使用 发布管道项目(PublishPipelineArtifact@1)任务发布项目 。 此任务将上传生成的所有文件 $(Build.ArtifactStagingDirectory)作为项目。
将以下代码添加到 azure-pipelines.yml 文件:
steps:
- task: DotNetCoreCLI@2
  inputs:
    command: publish
    publishWebProjects: True
    arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'
    zipAfterPublish: True
- task: PublishPipelineArtifact@1
  inputs:
    targetPath: '$(Build.ArtifactStagingDirectory)' 
    artifactName: 'myWebsite'
若要在发布之前将更多文件复制到生成目录,请使用复制文件 (CopyFile@2) 任务。
注意
默认情况下,publishWebProjects.NET Core (DotNetCoreCLI@2) 任务中的输入设置为true,并发布存储库中的所有 Web 项目。 有关详细信息,请参阅 azure-pipelines-tasks GitHub 存储库。
若要将 .NET 生成的输出发布到管道,请执行以下任务:
- 使用 .NET CLI 运行dotnet publish --output $(Build.ArtifactStagingDirectory),或使用发布命令添加DotNetCoreCLI@2() 任务。
- 使用发布生成项目 (PublishBuildArtifacts@1) 任务发布此项目。
以下 azure-pipelines.yml 代码还会将生成项目发布为 ZIP 文件。 该 PublishBuildArtifacts@1 任务将上传生成的所有文件 $(Build.ArtifactStagingDirectory) 作为项目。
steps:
- task: DotNetCoreCLI@2
  inputs:
    command: publish
    publishWebProjects: true
    arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'
    zipAfterPublish: True
- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'drop'
有关详细信息,请参阅发布和下载生成项目。
发布到 NuGet 源
若要创建 NuGet 包并将其发布到 NuGet 源,请将以下代码片段添加到 azure-pipelines.yml 文件:
steps:
# ...
# do this near the end of your pipeline
- script: dotnet pack /p:PackageVersion=$(version)  # define the version variable elsewhere in your pipeline
- task: NuGetAuthenticate@1
  inputs:
    nuGetServiceConnections: '<NuGet service connection>'
- task: NuGetCommand@2
  inputs:
    command: push
    nuGetFeedType: external
    publishFeedCredentials: '<NuGet service connection>'
    versioningScheme: byEnvVar
    versionEnvVar: version
注意
该 NuGetAuthenticate@1 任务不支持 NuGet API 密钥身份验证。 如果使用 NuGet API 密钥,请使用 NuGetCommand@2 具有 command 输入集的任务 push 和 --api-key 参数。 例如,dotnet nuget push --api-key $(NuGetApiKey)。
有关版本控制和发布 NuGet 包的详细信息,请参阅 使用 Azure Pipelines 发布 NuGet 包。
将 NuGet 包发布到 Azure Artifacts
可以使用 NuGetCommand@2 任务将 NuGet 包发布到 Azure Artifacts 源。 有关详细信息,请参阅 使用 Azure Pipelines 发布 NuGet 包。
将 ZIP 文件存档发布到 Web 应用
若要创建准备发布到 Web 应用的 ZIP 文件存档,请添加以下代码片段以 azure-pipelines.yml。 在生成应用后运行此任务,在大多数情况下接近管道的末尾。 例如,在部署到 Windows 上的 Azure Web 应用之前运行此任务。
steps:
# ...
- task: DotNetCoreCLI@2
  inputs:
    command: publish
    publishWebProjects: True
    arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'
    zipAfterPublish: True
要将此存档发布到 Web 应用,请参阅 Azure Web 应用部署。
发布符号
可以使用该 PublishSymbols@2 任务将符号发布到 Azure Artifacts 符号服务器或文件共享。 有关详细信息,请参阅发布符号。
例如,若要将符号发布到文件共享,请将以下代码片段添加到 azure-pipelines.yml 文件中:
- task: PublishSymbols@2
  inputs:
    SymbolsFolder: '$(Build.SourcesDirectory)'
    SearchPattern: '**/bin/**/*.pdb'
    IndexSources: true
    PublishSymbols: true
    SymbolServerType: 'FileShare' 
    SymbolsPath: '\\<server>\<shareName>'
若要使用经典编辑器,请将 索引源和发布符号 任务添加到管道。
故障排除
如果项目在本地计算机上成功生成,但不在本地管道中生成,请浏览以下潜在原因和纠正措施。
- .NET Core SDK 的预发行版未安装在Microsoft托管的代理上,并且向所有 Azure Pipelines 数据中心推出新版本的 SDK 可能需要几周时间。 可以使用 .NET Core 任务在Microsoft托管代理上安装所需的 .NET Core SDK 版本,而不是等待推出完成。
- 新版本的 .NET Core SDK 或 Visual Studio 可能会中断生成,例如,如果它包含 NuGet 工具的较新版本或功能。 请确保开发计算机上的 .NET Core SDK 版本和运行时与管道代理匹配。 - 可以在 - dotnet --version管道中包含命令行脚本来打印 .NET Core SDK 的版本。 使用 .NET Core 工具安装程序 在代理上部署同一版本,或将项目和开发计算机更新为 .NET Core SDK 的管道版本。
- 由于从 NuGet.org 还原包时出现连接问题,生成可能会间歇性失败。NuGet.org 可能存在问题,或者 Azure 数据中心与 NuGet.org 之间可能存在网络问题。可以探索是否将 Azure Artifacts 与 上游源 配合使用来缓存包,从而提高生成的可靠性。 - 管道的凭据自动用于连接到 Azure Artifacts。 这些凭据通常派生自项目集合生成服务帐户。 若要详细了解如何使用 Azure Artifacts 来缓存 NuGet 包,请参阅连接到 Azure Artifact 源。 
- 你可能在 Visual Studio 中使用一些未在管道中编码的逻辑。 Azure Pipelines 在新进程中按顺序运行任务中的每个命令。 检查管道生成的日志,以查看在生成中运行的确切命令。 若要解决此问题,请在开发计算机上按相同顺序重复相同的命令。 
- 如果混合解决方案包含一些 .NET Core 项目和一些 .NET Framework 项目,请使用 NuGet 任务还原 packages.config 文件中指定的包。 添加 MSBuild 或 Visual Studio 生成任务以生成 .NET Framework 项目。