You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 10+Azure Pipeline上传SonarQube代码覆盖率报告失败求助

解决Azure Pipeline中.NET 10项目SonarQube覆盖率上传问题

核心问题梳理

你当前的问题在于:

  • dotnet test --coverage --coverage-output-format xml生成的是Cobertura格式XML,而SonarQube的C#分析器不支持该格式
  • SonarQubePrepare任务配置的sonar.cs.vscoveragexml.reportsPaths仅识别Visual Studio原生的vscoveragexml格式,所以直接传入Cobertura文件无效

以下是可落地的解决方案:

步骤1:生成原生.coverage测试覆盖率文件

修改测试命令,生成SonarQube兼容的原始覆盖率文件,而非直接输出XML:

dotnet test -c Release --solution solution.slnx --report-trx --collect:"XPlat Code Coverage"

该命令会在每个测试项目的TestResults目录下生成.coverage(或.netcoverage)格式的原生覆盖率文件

步骤2:安装dotnet-coverage工具

在Pipeline中添加任务,安装用于转换覆盖率格式的工具:

dotnet tool install --global dotnet-coverage

步骤3:转换为SonarQube支持的vscoveragexml格式

将所有测试项目的覆盖率文件合并并转换为标准vscoveragexml格式:

dotnet-coverage merge "**/TestResults/**/*.coverage" -o merged-coverage.xml -f xml

-f xml参数指定输出格式为vscoveragexml,完全匹配SonarQube的配置要求

步骤4:配置SonarQubePrepare任务

在SonarQubePrepare@7任务中指定转换后的覆盖率文件路径:

- task: SonarQubePrepare@7
  inputs:
    SonarQube: '你的SonarQube服务连接名'
    scannerMode: 'MSBuild'
    projectKey: '你的项目Key'
    projectName: '你的项目名'
    extraProperties: |
      sonar.cs.vscoveragexml.reportsPaths=$(Build.SourcesDirectory)/merged-coverage.xml

额外优化(可选)

如果需要保留Pipeline概览的HTML覆盖率报告,可在转换后用reportgenerator生成:

reportgenerator -reports:merged-coverage.xml -targetdir:coverage-report -reporttypes:Html

再通过PublishBuildArtifacts任务发布该HTML报告即可。

内容的提问来源于stack exchange,提问作者Ronald

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 17:42:08