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 项目。