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

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

  • 使用 自承载 代理设置生成环境。
  • 还原依赖项,生成项目,并使用 .NET Core 任务 (DotNetCoreCLI@2) 脚本 进行测试。
  • 测试代码,并使用 发布代码覆盖率任务 来发布代码覆盖率结果。
  • 打包生成输出并将其传送到:
    • NuGet 源
    • 用于将 .zip 文件。
    • 使用 Microsoft 托管 代理或 自托管 代理设置生成环境。
    • 还原依赖项,生成项目,并使用 .NET Core 任务 (DotNetCoreCLI@2) 脚本 进行测试。
    • 测试代码,并使用 发布代码覆盖率任务 来发布代码覆盖率结果。
    • 打包生成输出并将其传送到:
      • NuGet 源
      • 用于将 .zip 文件。
      • 你是 Azure Pipelines 的新手吗? 如果是,建议先尝试以下部分。

        创建 .NET 项目

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

      • 打开终端窗口。

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

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

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

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

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

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

      • 将本地 Git 存储库连接到 GitHub 存储库

        创建 DevOps 项目

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

      • 在浏览器中,转到 dev.azure.com 并登录。
      • 选择你的组织。
      • 通过选择新建项目创建项目(如果是在组织中创建第一个项目)来创建一个新项目。
      • 输入项目名称
      • 选择项目的可见性
      • 选择创建
      • 设置生成环境

        生成将在自托管代理上运行。 请确保在代理上安装了所需版本的 .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 管道编辑器或经典编辑器来创建管道。 若要使用经典编辑器,请选择使用经典编辑器

      • 选择源存储库。 对于此示例,请使用 GitHub Enterprise Server

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

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

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

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

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

      • 选择来源。 对于此示例,请选择 GitHub Enterprise Server
      • 选择连接到 GitHub Enterprise Server
      • 输入 GitHub 凭据以创建要在管道中使用的 GitHub 服务连接。
      • 选择存储库,然后选择继续
      • 选择来源。 对于此示例,请选择 GitHub
      • 输入 GitHub 凭据以创建要在管道中使用的 GitHub 服务连接。
      • 选择存储库,然后选择继续
      • 选择模板中,找到并选择 ASP.NET Core

        管道页面随即打开,并可在其中配置管道。 可在此处添加任务、指定代理池和代理以及配置其他生成选项。

      • 任务选项卡中,选择代理池(通常为默认

      • 选择代理规范。 对于此示例,请选择 windows-latest

        可通过选择代理作业上的 + 并从目录中选择其他任务,从而将其他任务添加到代理作业。 例如,你可能想将使用 .NET Core 任务添加为第一个任务,以便安装所需版本的 .NET SDK。

        保存并运行管道
      • 从页面顶部的保存并排队下拉列表中选择保存并排队
      • 运行管道中,输入注释,然后选择保存并运行
      • 可通过从摘要选项卡上的作业部分选择该作业来查看正在运行的管道。

      • 保存并排队下拉列表中选择保存并排队
      • 保存生成管道并排队对话框中,选择保存并排队
      • 生成 #nnnnnnnn.n 已排队消息出现时,选择链接以查看正在运行的管道。

      • 从页面顶部的保存并排队下拉列表中选择保存并排队
      • 运行管道对话框中,添加保存注释,然后选择保存并运行
      • 可通过从摘要选项卡上的作业部分选择该作业来查看正在运行的管道。

        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
        

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

        还原依赖项

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

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

        此管道在 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'
        

        如果使用的是 Ubuntu 24.04 或更高版本,则必须将 NuGetAuthenticate 任务与 .NET CLI 配合使用,而不是 NuGetCommand@2 任务。 有关详细信息,请参阅支持较新的 Ubuntu 托管映像

        在 .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>
        

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

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

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

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

      • 从任务目录选择 .NET Core

      • 命令下拉列表选择 restore 命令。

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

      • 选择 添加

      • 选择保存以提交此更改。

        通过运行 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
        

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

        steps:
        - script: dotnet build --configuration $(buildConfiguration)
          displayName: 'dotnet build $(buildConfiguration)'
        
      • (可选)添加显示名称

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

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

      • 选择 添加

      • 选择保存以提交此更改。

      • (可选)添加显示名称

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

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

      • 拖动此任务以将置于管道中的正确任务序列中。

      • 选择保存并排队下拉列表,然后选择用于保存更改的选项。

        将 .NET SDK 命令添加到管道

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

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

        存储库中有测试项目时,可使用 .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 任务,请执行以下操作:

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

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

        如果选择运行 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@2任务)将代码覆盖率结果发布到服务器。 覆盖率工具必须配置为以 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@2
          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 生成的输出发布到管道,请执行以下任务:

      • 在 CLI 中运行 dotnet publish --output $(Build.ArtifactStagingDirectory),或使用 publish 命令添加 DotNetCoreCLI@2 任务。
      • 使用发布生成项目 (PublishBuildArtifacts@1) 任务发布此项目。
      • 将以下代码片段添加到 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 任务并通过 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 项目中进行单元测试

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

        答:生成和发布任务

  •