生成、测试和部署 .NET Core 应用

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

使用 Azure Pipeline 自动生成、测试和部署 .NET Core 项目。 本文演示如何完成以下任务:

注意

有关 .NET Framework 项目的帮助,请参阅使用 .NET Framework 生成 ASP.NET 应用

先决条件

  • GitHub 帐户,可在其中创建存储库。 免费创建一个
  • Azure DevOps 集合。
  • 可在安装了 Docker 的自承载代理上运行管道,并在代理的主机上运行。

创建第一个管道

你是 Azure Pipelines 的新手吗? 如果是,建议先尝试以下部分。

创建 .NET 项目

如果没有可使用的 .NET 项目,则请在本地系统上创建一个新项目。 首先安装最新的 .NET 8.0 SDK

  1. 打开终端窗口。

  2. 创建项目目录,然后转到此目录。

  3. 创建新的 .NET 8 Web 应用。

    dotnet new webapp -f net8.0
    
  4. 在同一个终端会话中,从项目目录中使用 dotnet run 命令在本地运行应用程序。

    dotnet run
    
  5. 应用程序启动后,按 Ctrl-C 将其关闭。

创建 git 存储库,并将其连接到 GitHub

  1. 在项目目录中,创建本地 Git 存储库,并将应用程序代码提交到主分支

  2. 将本地 Git 存储库连接到 GitHub 存储库

创建 DevOps 项目

登录到 Azure Pipelines。 登录后,浏览器会转到 https://dev.azure.com/my-organization-name 并显示 Azure DevOps 仪表板。

  1. 在浏览器中,转到 dev.azure.com 并登录。
  2. 选择你的组织。
  3. 通过选择新建项目创建项目(如果是在组织中创建第一个项目)来创建一个新项目。
  4. 输入项目名称
  5. 选择项目的可见性
  6. 选择创建
  1. 在浏览器中,转到 Azure DevOps Server。
  2. 选择你的集合。
  3. 通过选择新建项目创建项目(如果是在集合中创建第一个项目)来创建一个新项目。
  4. 输入项目名称
  5. 选择项目的可见性
  6. 选择创建
  1. 在浏览器窗口中,登录到 Azure DevOps Server 并选择集合。
  2. 选择新建项目
  3. 输入项目名称。
  4. (可选)输入说明。
  5. 选择创建

设置生成环境

生成将在自托管代理上运行。 请确保在代理上安装了所需版本的 .NET Core SDK 和运行时。 可在 WindowsLinuxmacOSDocker 上使用 .NET Core SDK 和运行时来生成 .NET Core 项目。

可通过在管道 YAML 文件中添加 UseDotNet@2 任务来安装特定版本的 .NET SDK,或使用经典编辑器将此任务添加到管道。

示例 YAML 代码片段:

steps:
- task: UseDotNet@2
  inputs:
    version: '8.x'

生成将在 Microsoft 托管代理上运行。 可在 Windows、Linux 和 macOS 上使用 .NET Core SDK 和运行时来生成 .NET Core 项目。

或者,还可使用自托管代理。 通过自托管代理,可使用非 Azure DevOps Services 官方支持的预览版或专用 SDK,并运行增量生成。

创建管道

可使用 YAML 管道编辑器或经典编辑器来创建管道。 若要使用经典编辑器,请选择使用经典编辑器

创建新管道并选择来源
  1. 登录到你的 Azure DevOps 组织,并转到你的项目。

  2. 转到“管道”,然后选择“新建管道”或是“创建管道”(如果是首次创建管道)。

  3. 完成向导中的各个步骤。首先选择 GitHub 作为源代码位置。

  4. 可能会重定向到 GitHub 进行登录。 如果是这样,请输入 GitHub 凭据。

  5. 看到存储库列表时,请选择你的存储库。

  6. 你可能会被重定向到 GitHub 来安装 Azure Pipelines 应用。 如果是,请选择批准并安装

配置管道
  1. 配置选项卡出现时,选择显示更多,然后从列表中选择 ASP.NET Core 管道模板。

  2. 检查新管道,了解 YAML 的作用。

可根据自己的要求自定义 YAML 文件。 例如,可指定代理池或添加任务来安装其他 .NET SDK

保存并运行管道
  1. 准备就绪后,选择保存并运行

    新 YAML 管道中的“保存并运行”按钮

  2. (可选)可编辑提交消息。

  3. 通过选择保存并运行,将新的 azure-pipelines.yml 文件提交到存储库。

  4. 若要查看正在运行的管道,请在作业部分选择该作业。

创建并运行管道

可使用 YAML 管道编辑器或经典编辑器创建管道。

  1. 转到项目,然后选择管道
  2. 选择创建管道(如果是为此项目创建第一个管道,则选择新建管道)。
选择来源
  1. 选择源存储库。 对于此示例,请使用 GitHub Enterprise Server

    1. 输入 GitHub 帐户的 URL。 例如 https://github.com/<username>
    2. 输入 GitHub 帐户的个人访问令牌。
    3. 输入服务连接名称。 例如 my-github
    4. 选择创建
  2. 选择你的 GitHub 存储库。

配置管道
  1. 配置选项卡上,选择显示更多,然后从列表中选择 ASP.NET Core 管道模板。

  2. 检查新管道,了解 YAML 的作用。

可根据自己的要求自定义 YAML 文件。 例如,可添加任务来安装 .NET SDK 或测试并发布项目。

保存并运行管道
  1. 选择“保存”。

    显示新 YAML 管道中的“保存并运行”按钮的截图。

  2. 若要将管道 YAML 文件提交到存储库,请按需编辑提交消息,然后选择保存

  3. 选择运行以运行管道。

若要查看管道运行时的生成日志,请选择页面顶部的生成号。

  1. 选择保存并运行

    显示新 YAML 管道中的“保存并运行”按钮的截图。

  2. 若要将新的 azure-pipelines.yml 文件提交到存储库,请按需编辑提交消息,然后选择保存并运行

若要查看正在运行的管道,请在作业部分选择该作业。

现在,你已创建一个可自定义的有效管道! 进一步阅读以了解自定义管道的某些常见方法。

生成环境

Azure Pipelines 使用自托管代理生成 .NET Core 项目。 请确保在代理上安装了所需版本的 .NET Core SDK 和运行时。 可在 WindowsLinuxmacOSDocker 上使用 .NET Core SDK 和运行时来生成 .NET Core 项目。

例如,若要在管道 YAML 文件中选择池与代理功能:

可为生成作业选择代理池和代理。 根据代理的功能指定代理。

pool:
  name: myPrivateAgents
  demands:
  - agent.os -equals Darwin
  - anotherCapability -equals somethingElse

可通过在管道中添加 UseDotNet@2 任务来安装特定版本的 .NET SDK。 请记住,对于在物理系统上运行的代理,通过管道安装 SDK 和工具会改变代理主机上的生成环境。

若要安装较新的 SDK,请在以下代码片段中将 performMultiLevelLookup 设置为 true

steps:
- task: UseDotNet@2
  displayName: 'Install .NET Core SDK'
  inputs:
    version: 8.x
    performMultiLevelLookup: true
    includePreviewVersions: true # Required for preview versions

可使用 Azure Pipelines 在 Windows、Linux 或 macOS 上生成 .NET Core 项目,而无需设置基础结构。

例如,可在管道 YAML 文件中设置 Ubuntu。

pool:
  vmImage: 'ubuntu-latest' 

请参阅 Microsoft 托管代理以获取映像的完整列表和更多配置示例。

Azure Pipelines 中的 Microsoft 托管代理包含受支持 .NET Core SDK 的多个预安装版本。 Microsoft 托管代理不含某些旧版本的 .NET Core SDK。 它们通常也不包括预发行版本。 如果需要 Microsoft 托管代理上的这些版本的 SDK,请使用 UseDotNet@2 任务安装它们。

例如,若要安装 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

提示

为节省运行工具安装程序的成本,可设置 LinuxmacOSWindows 自托管代理。 如果你有大型存储库或者可以运行增量生成,则也可以使用自托管代理来节省时间。 自托管代理还有助于使用非 Azure DevOps 官方支持或仅在公司或本地环境中可用的预览版或专用 SDK。

还原依赖项

NuGet 是依赖于未生成的代码的常用方法。 可以通过 .NET Core 任务或直接在管道中的脚本中运行 dotnet restore 命令,下载项目文件中指定的 NuGet 包和项目特定工具。 有关详细信息,请参阅 .NET Core 任务 (DotNetCoreCLI@2)

可以从 Azure Artifacts、NuGet.org 或其他外部或内部 NuGet 存储库下载 NuGet 包。 .NET Core 任务对于从经过身份验证的 NuGet 源还原包特别有用。 如果源与管道位于同一项目中,则无需进行身份验证。

此管道在 DotNetCoreCLI@2 任务中使用 dotnet restore 的 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)'

dotnet restore 命令使用与 .NET Core SDK 打包的 NuGet.exe,且只能还原 .NET Core 项目 .csproj 文件中指定的包。

如果解决方案中还有 Microsoft .NET Framework 项目,或者使用 package.json 指定依赖项,请使用 NuGet 任务还原这些依赖项。

- task: NuGetCommand@2
  inputs:
    command: 'restore'
    restoreSolution: '**/*.sln'
    feedsToUse: 'select'

在 .NET Core SDK 2.0 及更高版本中,运行 dotnet build 等命令时会自动还原包。 但是,如果使用了经过身份验证的源,则仍需使用 .NET Core 任务来还原包。

从 NuGet.org 还原包时,生成可能会因连接问题而失败。可将 Azure Artifacts 与上游源配合使用来缓存包。 管道在连接到 Azure Artifacts 时会自动使用管道的凭证。 这些凭据通常派生自项目集合生成服务帐户。 若要详细了解如何使用 Azure Artifacts 来缓存 NuGet 包,请参阅连接到 Azure Artifact 源

若要指定 NuGet 存储库,请将 URL 置于存储库中的 NuGet.config 文件内。 如果源已经过身份验证,请在项目设置下的服务选项卡中创建 NuGet 服务连接来管理其凭据。

使用 Microsoft 托管代理时,每次运行生成时都会获得一个新计算机,而它会在每次运行时还原这些包。 还原可能会花费大量时间。 若要缓解问题,可以使用 Azure Artifacts 或自托管代理,这样便可体会到使用包缓存的好处。

有关 NuGet 服务连接的详细信息,请参阅发布到 NuGet 源

从外部源还原包

执行以下操作以从外部源还原包。

可使用 YAML 管道编辑器将 restore 命令添加到管道,具体方法是将以下代码片段直接插入 azure-pipelines.yml 文件或使用任务助手添加 .NET Core 任务。

# do this before your build tasks
steps:
- task: DotNetCoreCLI@2
  displayName: Restore
  inputs:
    command: restore
    projects: '**/*.csproj'
    feedsToUse: config
    nugetConfigPath: NuGet.config    # Relative to root of the repository
    externalFeedCredentials: <Name of the NuGet service connection>

将<占位符>替换为服务连接名称。

若要使用任务助手,请执行以下操作:

若要使用任务助手添加生成任务,请执行以下步骤:

  1. 转到 YAML 文件中要插入此任务的位置。

  2. 从任务目录选择 .NET Core

  3. 命令下拉列表选择 restore 命令。

  4. 项目路径字段中,输入 .csproj 文件的路径。

  5. 选择 添加

  6. 选择保存以提交此更改。

注意

请确保在 NuGet.config 文件中指定了自定义源,并在 NuGet 服务连接中指定了凭据。

生成项目

通过运行 dotnet build 命令生成 .NET Core 项目。 可将此命令作为命令行脚本或使用 .NET Core 任务以将此命令添加到管道。

使用 .NET Core 任务的 .NET Core 生成

使用 DotNetCoreCLI@2 任务来生成 YAML 的示例:

steps:
- task: DotNetCoreCLI@2
  displayName: Build
  inputs:
    command: build
    projects: '**/*.csproj'
    arguments: '--configuration $(buildConfiguration)' # Update this to match your needs

可通过直接编辑此文件或使用任务助手来添加 .NET Core 任务,从而使用 YAML 管道编辑器添加生成任务。

若要使用任务助手添加生成任务,请执行以下步骤:

  1. 转到 YAML 文件中要插入此任务的位置。

  2. 从任务目录选择 .NET Core

  3. 命令下拉列表选择 build 命令。

  4. 项目路径字段中,输入 .csproj 文件的路径。

  5. 选择 添加

  6. 选择保存以提交此更改。

使用命令行脚本的 .NET Core 生成

dotnet build 用作脚本来生成 YAML 的示例:

steps:
- script: dotnet build --configuration $(buildConfiguration)
  displayName: 'dotnet build $(buildConfiguration)'

可通过直接编辑此文件或添加命令行任务,从而使用 YAML 管道编辑器添加生成任务。

使用以下步骤添加命令行任务:

  1. 转到 YAML 文件中要插入此任务的位置。

  2. 从任务目录中选择命令行

  3. (可选)添加显示名称

  4. 输入包含参数的 dotnet build 命令。 例如 dotnet build --configuration $(buildConfiguration)

  5. 输入作为工作目录的 .csproj 文件的路径。

  6. 选择 添加

  7. 选择保存以提交此更改。

将 .NET SDK 命令添加到管道

可将 .NET SDK 命令作为脚本或使用 .NET Core 任务将这些命令添加到项目。 借助 .NET Core 任务 (DotNetCoreCLI@2) 任务,可将 dotnet CLI 命令轻松添加到管道。 可通过编辑 YAML 文件或使用经典编辑器来添加 .NET Core 任务。

使用 .NET Core 任务添加 .NET CLI 命令

若要使用 YAML 管道编辑器添加 .NET Core CLI 命令,请执行以下步骤:

  1. 转到 YAML 文件中要插入此任务的位置。

  2. 从任务目录选择 .NET Core

  3. 选择要运行的命令。

  4. 配置所需的所有选项。

  5. 选择 添加

  6. 选择保存以提交此更改。

使用脚本添加 .NET Core CLI 命令

可将 .NET Core CLI 命令添加为 azure-pipelines.yml 文件中的 script

示例:


steps:
# ...
- script: dotnet test <test-project> 

安装工具

若要在 Windows 上运行的版本中安装 .NET Core 全局工具(如 dotnetsay),请执行以下步骤:

  1. 添加 .NET Core 任务,并设置以下属性:
    • 命令:custom。
      • 项目路径留空
    • 自定义命令:tool。
    • 参数install -g dotnetsay
  2. 若要运行该工具,请添加命令行并设置以下属性:
    • 脚本:dotnetsay

运行测试

存储库中有测试项目时,可使用 .NET Core 任务并通过 MSTest、xUnit 和 NUnit 等测试框架来运行单元测试。 测试项目必须引用 Microsoft.NET.Test.SDK 版本 15.8.0 或更高版本。 测试结果会自动发布到服务。 生成摘要中提供了这些结果,可用于排查失败的测试和测试计时分析。

可使用 DotNetCoreCLI@2 任务将测试任务添加到管道,或将以下代码片段添加到 azure-pipelines.yml 文件:

steps:
# ...
# do this after other tasks such as building
- task: DotNetCoreCLI@2
  inputs:
    command: test
    projects: '**/*Tests/*.csproj'
    arguments: '--configuration $(buildConfiguration)'

使用 .NET Core 任务编辑器时,将命令设为 test,而项目路径则应引用解决方案中的测试项目。

或者,也可使用特定记录器运行 dotnet test 命令,然后使用发布测试结果任务:

steps:
# ...
# do this after your tests have 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 任务运行测试时,覆盖率数据会自动发布到服务器。 可从生成摘要下载 .coverage 文件,以便在 Visual Studio 中进行查看。

若要将以下代码片段添加到 azure-pipelines.yml 文件,请执行以下操作:

steps:
# ...
# do this after other tasks such as building
- task: DotNetCoreCLI@2
  inputs:
    command: test
    projects: '**/*Tests/*.csproj'
    arguments: '--configuration $(buildConfiguration) --collect "Code coverage"'

若要通过任务编辑器添加 .NET Core 任务,请执行以下操作:

  1. 将 .NET Core 任务添加到生成作业并设置以下属性:

    1. 命令:test。
    2. 项目路径应引用解决方案中的测试项目
    3. 参数--configuration $(BuildConfiguration) --collect "Code coverage"
  2. 确保发布测试结果选项保持选中状态。

如果选择运行 dotnet test 命令,请指定测试结果记录器和覆盖率选项。 然后使用发布测试结果任务:

steps:
# ...
# do this after your tests have run
- script: dotnet test <test-project> --logger trx --collect "Code coverage"
- task: PublishTestResults@2
  inputs:
    testRunner: VSTest
    testResultsFiles: '**/*.trx'

使用 Coverlet 收集代码覆盖率指标

如果要在 Linux 或 macOS 上生成,可以使用 Coverlet 或类似工具来收集代码覆盖率指标。

可使用发布代码覆盖率结果 (PublishCodeCoverageResults@1) 任务将代码覆盖率结果发布到服务器。 覆盖率工具必须配置为以 Cobertura 或 JaCoCo 覆盖格式生成结果。

若要运行测试并使用 Coverlet 发布代码覆盖率,请执行以下任务:

  • 添加对 coverlet.collector NuGet 包的引用。

  • 若要将以下代码片段添加到 azure-pipelines.yml 文件,请执行以下操作:

    - task: UseDotNet@2
      inputs:
        version: '8.x'
        includePreviewVersions: true # Required for preview versions
    
    - task: DotNetCoreCLI@2
      displayName: 'dotnet build'
      inputs:
        command: 'build'
        configuration: $(buildConfiguration)
    
    - 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: 'MyTestLibrary' # update with your test project directory
    
    - task: PublishCodeCoverageResults@1
      displayName: 'Publish code coverage report'
      inputs:
        codeCoverageTool: 'Cobertura'
        summaryFileLocation: '$(Agent.TempDirectory)/**/coverage.cobertura.xml'
    

打包和交付代码

可通过以下方式发布生成项目:

  • 发布到 Azure Pipelines。
  • 将包发布到 Azure Artifacts。
  • 创建 NuGet 包并发布到 NuGet 源。
  • 创建 .zip 存档以部署 Web 应用。

将工件发布到 Azure Pipelines

若要将 .NET 生成的输出发布到管道,请执行以下任务:

  • 在 .NET CLI 中运行 dotnet publish --output $(Build.ArtifactStagingDirectory),或使用 publish 命令添加 DotNetCoreCLI@2 任务。
  • 使用发布管道项目任务发布此项目。

若要将以下代码片段添加到 azure-pipelines.yml 文件,请执行以下操作:

steps:

- task: DotNetCoreCLI@2
  inputs:
    command: publish
    publishWebProjects: True
    arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'
    zipAfterPublish: True

# this code takes all the files in $(Build.ArtifactStagingDirectory) and uploads them as an artifact of your build.
- task: PublishPipelineArtifact@1
  inputs:
    targetPath: '$(Build.ArtifactStagingDirectory)' 
    artifactName: 'myWebsite'

注意

默认情况下,DotNetCoreCLI@2 任务的 publishWebProjects 输入将设为 true。 默认情况下,此任务将发布存储库中的所有 Web 项目。 可以在 GitHub 上的开放源代码任务中找到更多帮助和信息。

若要在发布之前将更多文件复制到生成目录,请使用复制文件 (CopyFile@2) 任务。

若要将 .NET 生成的输出发布到管道,请执行以下任务:

将以下代码片段添加到 azure-pipelines.yml 文件,以将生成项目发布为 .zip 文件:

steps:

- task: DotNetCoreCLI@2
  inputs:
    command: publish
    publishWebProjects: True
    arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'
    zipAfterPublish: True

# this code takes all the files in $(Build.ArtifactStagingDirectory) and uploads them as an artifact of your build.
- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'drop'

有关详细信息,请参阅发布和下载生成项目

发布到 NuGet 源

若要创建 NuGet 包并将其发布到 NuGet 源,请添加以下代码片段:

steps:
# ...
# do this near the end of your pipeline in most cases
- script: dotnet pack /p:PackageVersion=$(version)  # define version variable elsewhere in your pipeline
- task: NuGetAuthenticate@1
  inputs:
    nuGetServiceConnections: '<Name of the NuGet service connection>'
- task: NuGetCommand@2
  inputs:
    command: push
    nuGetFeedType: external
    publishFeedCredentials: '<Name of the NuGet service connection>'
    versioningScheme: byEnvVar
    versionEnvVar: version

注意

NuGetAuthenticate@1 任务不支持 NuGet API 密钥身份验证。 如果使用的是 NuGet API 密钥,则请使用 NuGetCommand@2 任务并通过 --api-key 参数将 command 输入设为 push。 例如 dotnet nuget push --api-key $(NuGetApiKey)

有关版本控制以及发布 NuGet 包的详细信息,请参阅发布 NuGet 源

将 NuGet 包发布到 Azure Artifacts

可使用 NuGetCommand@2 以推送到 Azure Artifacts 源,从而将 NuGet 包发布到 Azure Artifacts 源。 有关示例,请参阅使用 Azure Pipelines 发布 NuGet 包

部署 Web 应用

若要创建准备发布到 Web 应用的 .zip 文件存档,请添加以下代码片段:

steps:
# ...
# do this after you've built your app, near the end of your pipeline in most cases
# for example, you do this before you deploy to an Azure web app on Windows
- 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'

使用经典编辑器时,请从任务目录中选择索引源发布符号以将其添加到管道中。

有关详细信息,请参阅发布符号

疑难解答

如果可以在开发计算机上生成项目,但在 Azure Pipelines 上生成项目时遇到问题,请了解以下潜在原因和纠正措施:

  • .NET Core SDK 的预发布版本未安装在 Microsoft 托管代理上。 发布新版本的 .NET Core SDK 后,可能需要几周时间才能在所有 Azure Pipelines 数据中心内推出。 无需等待推出完成。 可使用使用 .NET Core 任务在 Microsoft 托管代理上安装所需的 .NET Core SDK 版本。
  • 检查开发计算机上的 .NET Core SDK 版本和运行时,并确保它们与代理匹配。 可以在管道中包含命令行脚本 dotnet --version,以打印 .NET Core SDK 的版本。 使用 .NET Core 工具安装程序在代理上部署同一版本,或将项目和开发计算机更新为较新版本的 .NET Core SDK。

  • 你可能在 Visual Studio IDE 中使用了一些未在管道中编码的逻辑。 Azure Pipelines 会在新进程中一个接一个地运行任务中指定的每个命令。 检查管道生成的日志,查看作为生成一部分运行的确切命令。 在开发计算机上按相同的顺序重复相同的命令,以找到问题。

  • 如果混合解决方案包含一些 .NET Core 项目和一些 .NET Framework 项目,则还应使用 NuGet 任务还原 packages.config 文件中指定的包。 添加 MSBuildVisual Studio 生成任务以生成 .NET Framework 项目。

  • 还原包时,生成可能会间歇性地失败:可能是 NuGet.org 出现问题,或是 Azure 数据中心与 NuGet.org 之间存在网络问题。你可探索将 Azure Artifacts 与 NuGet.org 一起用作上游源能否提高生成的可靠性,因为它不受我们控制。

  • 有时,在推出新版本的 .NET Core SDK 或 Visual Studio 时,生成可能会中断。 例如,SDK 所附带 NuGet 工具的较新版本或功能可能会中断生成。 若要解决此问题,请使用“.NET Core 工具安装程序”任务指定生成中使用的 .NET Core SDK 版本。

常见问题解答

问:我可从何处了解有关 Azure Artifacts 的更多信息?

答:Azure Artifacts 中的包管理

问:我可从何处了解有关 .NET Core 命令的详细信息?

答:.NET Core CLI 工具

问:我可从何处了解有关在解决方案中运行测试的详细信息?

答:在 .NET Core 项目中进行单元测试

问:我可在何处了解有关任务的详细信息?

答:生成和发布任务