配置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
相关产品推荐
相关产品推荐

