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

配置SonarCloud与Coverlet后.NET项目代码覆盖率显示0%求助

问题:SonarCloud显示0%覆盖率但Coverlet已生成有效覆盖率文件

当前搭建的GitHub Actions流水线可正常运行SonarScanner和单元测试,无报错,但SonarCloud始终显示0错误、0%覆盖率,已确认Coverlet OpenCover格式的XML覆盖率文件已生成且包含有效数据。

问题根源及修复方案

1. 单元测试命令参数错误

原dotnet test命令中使用-o="coverage.xml"是错误的,-o参数用于指定测试结果的输出目录,而非覆盖率文件路径。需替换为-p:CoverletOutput=coverage.xml来指定生成的覆盖率文件名。

2. SonarScanner未指定覆盖率报告路径

SonarCloud无法自动发现覆盖率文件,需在sonarscanner begin阶段添加参数/d:sonar.cs.opencover.reportsPaths=coverage.xml,明确告知覆盖率报告的位置。

修改后的完整流水线配置

name: Development

on:
  push:
    branches: [ "development" ]
  pull_request:
    branches: [ "development" ]

jobs:
  Analysis:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3
      - name: Setup dotnet
        uses: actions/setup-dotnet@v3
        with:
          dotnet-version: '6.0.x'
          
      - name: Install Sonar global tool
        run: dotnet tool install --global dotnet-sonarscanner
        
      - name: Begin sonar scan
        run: | 
          dotnet sonarscanner begin /k:"Kwebbel-project_tweet-service" /o:"kwebbel-project"  /d:sonar.host.url=https://sonarcloud.io /d:sonar.login=${{ secrets.SONAR_TOKEN }} /d:sonar.verbose=true /d:sonar.cs.opencover.reportsPaths=coverage.xml
        
      - name: Build and run unit tests
        run: |
          dotnet restore
          dotnet build
          dotnet test -p:CollectCoverage=true -p:CoverletOutputFormat=opencover -p:CoverletOutput=coverage.xml
          
      - name: End Sonar scan
        run: dotnet sonarscanner end /d:sonar.login=${{ secrets.SONAR_TOKEN }}

额外验证建议

  • 执行流水线时,可添加步骤查看coverage.xml内容,确认路径和数据正确性:
    cat coverage.xml
    
  • 确保dotnet build在sonarscanner begin之后执行,这是SonarScanner收集代码分析数据的必要前提

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:22:37