Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 代码覆盖率选项卡未在Azure DevOps中显示报告_Asp.net Core_Azure Devops - Fatal编程技术网

Asp.net core 代码覆盖率选项卡未在Azure DevOps中显示报告

Asp.net core 代码覆盖率选项卡未在Azure DevOps中显示报告,asp.net-core,azure-devops,Asp.net Core,Azure Devops,我有一个.NET Core 2.2 web应用程序的构建管道,该应用程序有一个运行测试的.NET Core任务。然而,在运行我的管道并检查代码覆盖率选项卡之后,我得到了下面的消息 是否缺少我忘记执行或设置的任何操作?您需要进行以下设置: --configuration$(BuildConfiguration)--collect:“XPlat代码覆盖率”您需要安装coverlet.collectornuget包 然后安装报告生成器:install--tool path。dotnet rep

我有一个.NET Core 2.2 web应用程序的构建管道,该应用程序有一个运行测试的.NET Core任务。然而,在运行我的管道并检查代码覆盖率选项卡之后,我得到了下面的消息


是否缺少我忘记执行或设置的任何操作?

您需要进行以下设置:

--configuration$(BuildConfiguration)--collect:“XPlat代码覆盖率”
您需要安装
coverlet.collector
nuget包

然后安装报告生成器:
install--tool path。dotnet reportgenerator globaltool

运行报表生成器:
/reportgenerator-reports:$(Agent.TempDirectory)/**/coverage.cobertura.xml-targetdir:$(Build.SourcesDirectory)/coverlet/reports-reporttypes:“cobertura”

并发布代码覆盖率以获得以下信息:


您可以尝试以下步骤来发布代码覆盖率

1,首先需要确保项目引用指向nuget package coverlet.msbuild

<PackageReference Include="coverlet.msbuild" Version="2.5.1">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
3,然后在dotnet测试任务中,通过添加以下参数来启用CollectCoverage:

arguments: '/p:CollectCoverage=true /p:CoverletOutput=$(Build.SourcesDirectory)\TestResult\ /p:CoverletOutputFormat=cobertura'
4,并将任务安装到您的组织,然后在reportgenerator任务中指定CoverletOutput文件夹reports:
$(Build.SourcesDirectory)\TestResult\**\coverage.cobertura.xml
,如上述dotnet测试任务
/p:CoverletOutput=$(Build.SourcesDirectory)\TestResult\
中所述

请参阅以下yaml格式的完整示例:

steps:
  - task: UseDotNet@2
    inputs:
      version: 2.2.x 

  - task: DotNetCoreCLI@2
    inputs:
      command: restore
      projects: '**\*.csproj'

  - task: DotNetCoreCLI@2
    inputs:
      command: custom
      custom: tool
      arguments: install --tool-path . dotnet-reportgenerator-globaltool
    displayName: Install ReportGenerator tool

  - task: DotNetCoreCLI@2
    displayName: Test .NET
    inputs:
      command: test
      projects: '**\*Test*.csproj'
      publishTestResults: false
      arguments: '--configuration $(buildConfiguration) /p:CollectCoverage=true /p:CoverletOutput=$(Build.SourcesDirectory)\TestResult\ /p:CoverletOutputFormat=cobertura'
    condition: succeededOrFailed()

  - task: reportgenerator@4
    inputs:
      reports: '$(Build.SourcesDirectory)\TestResult\**\coverage.cobertura.xml'
      targetdir: '$(Build.SourcesDirectory)\coverlet\reports'
      verbosity: 'Verbose'

    condition: succeededOrFailed()
  - task: PublishCodeCoverageResults@1
    displayName: 'Publish code coverage'
    inputs:
      codeCoverageTool: Cobertura
      summaryFileLocation: $(Build.SourcesDirectory)\coverlet\reports\Cobertura.xml
      failIfCoverageEmpty: false
      reportDirectory: $(Build.SourcesDirectory)\coverlet\reports\
    condition: succeededOrFailed()

嗨,Krzysztof,我做了上面提到的所有事情,但是我在发布代码覆盖率任务中遇到了这个问题:没有找到要发布的代码覆盖率结果。是我测试它的示例项目。它在Linux和Windows host agent上工作。你可以用这个试试。你也可以像我那样分享你的配置,这样我也许可以帮助你。这个解决方案似乎不适用于我的项目,因为Xplat代码覆盖率只支持.NET Core 2.2.3及以上版本。你为什么这样认为?你能一个接一个地告诉我们你的步骤吗。我相信我们能解决这个问题。
steps:
  - task: UseDotNet@2
    inputs:
      version: 2.2.x 

  - task: DotNetCoreCLI@2
    inputs:
      command: restore
      projects: '**\*.csproj'

  - task: DotNetCoreCLI@2
    inputs:
      command: custom
      custom: tool
      arguments: install --tool-path . dotnet-reportgenerator-globaltool
    displayName: Install ReportGenerator tool

  - task: DotNetCoreCLI@2
    displayName: Test .NET
    inputs:
      command: test
      projects: '**\*Test*.csproj'
      publishTestResults: false
      arguments: '--configuration $(buildConfiguration) /p:CollectCoverage=true /p:CoverletOutput=$(Build.SourcesDirectory)\TestResult\ /p:CoverletOutputFormat=cobertura'
    condition: succeededOrFailed()

  - task: reportgenerator@4
    inputs:
      reports: '$(Build.SourcesDirectory)\TestResult\**\coverage.cobertura.xml'
      targetdir: '$(Build.SourcesDirectory)\coverlet\reports'
      verbosity: 'Verbose'

    condition: succeededOrFailed()
  - task: PublishCodeCoverageResults@1
    displayName: 'Publish code coverage'
    inputs:
      codeCoverageTool: Cobertura
      summaryFileLocation: $(Build.SourcesDirectory)\coverlet\reports\Cobertura.xml
      failIfCoverageEmpty: false
      reportDirectory: $(Build.SourcesDirectory)\coverlet\reports\
    condition: succeededOrFailed()