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

如何将.coverage文件上传至SonarCloud展示代码覆盖率

你遇到的覆盖率为0的问题有两个核心原因:

  1. 你通过--collect "Code Coverage"生成的.coverage是微软专有二进制格式,SonarCloud无法直接解析
  2. 你没有在sonarscanner的begin阶段声明覆盖率报告的路径和对应格式,扫描器不会主动识别未声明的覆盖率文件

以下是两种可落地的解决方法:

方案一:使用Coverlet生成SonarCloud兼容的覆盖率报告(推荐)

  • 第一步:给所有单元测试项目安装两个NuGet包:Coverlet.MSBuild、Coverlet.Collector
  • 第二步:使用修正后的命令序列执行扫描:
# begin阶段声明opencover格式的覆盖率报告路径
dotnet sonarscanner begin /k:"project-key" /d:sonar.login="myToken" /o:"myOrg" /d:sonar.cs.opencover.reportsPaths="**/coverage.opencover.xml"
# 构建解决方案
dotnet build "myPathTo.sln"
# 执行测试并生成opencover格式的覆盖率报告,加--no-build避免重复构建
dotnet test --no-build /p:CollectCoverage=true /p:CoverletOutputFormat=opencover
# 结束扫描
dotnet sonarscanner end /d:sonar.login="myToken"

方案二:转换原生.coverage文件为可识别的XML格式

如果你不想引入Coverlet依赖,可以把生成的二进制.coverage文件转换为Sonar支持的XML格式:

  • 第一步:全局安装dotnet-coverage工具:dotnet tool install --global dotnet-coverage
  • 第二步:使用修正后的命令序列执行扫描:
# begin阶段声明vs coverage xml格式的报告路径
dotnet sonarscanner begin /k:"project-key" /d:sonar.login="myToken" /o:"myOrg" /d:sonar.cs.vscoveragexml.reportsPaths="**/coverage.xml"
# 构建解决方案
dotnet build "myPathTo.sln"
# 生成原生.coverage文件
dotnet test --collect "Code Coverage"
# 转换二进制.coverage为xml格式,把<path-to-generated-.coverage>替换为你实际生成的.coverage文件路径
dotnet coverage convert <path-to-generated-.coverage> --output-format xml --output coverage.xml
# 结束扫描
dotnet sonarscanner end /d:sonar.login="myToken"

其他注意事项

  • 确保你的业务代码项目的DebugType属性设置为Portable或者Full,否则覆盖率采集会出现异常
  • SonarCloud默认会自动排除单元测试项目的代码,不需要手动添加过滤规则,避免误过滤业务代码
  • 如果你有多个测试项目,不需要单独合并报告,SonarScanner会自动聚合所有匹配路径的覆盖率文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:39:02