为什么SonarCloud扫描C# .NET6项目时始终未检出任何问题?
问题根因
你当前的工作流配置存在两个核心问题:
- 通用SonarCloud GitHub Action不适用于.NET项目的全量扫描,无法识别.NET编译产物、代码结构特征
- 代码扫描任务与构建任务完全独立,未关联构建过程产生的中间信息,无法完成代码异味、重复代码、覆盖率等指标的检测
修正步骤
1. 合并构建与Sonar扫描任务
.NET项目的Sonar扫描必须嵌入构建流程,不能拆分为两个独立Job,需要在同一个Job内按顺序执行「Sonar扫描启动→ 依赖还原→ 构建→ 测试→ 扫描结束上报」的流程。
2. 替换为SonarScanner for .NET执行扫描
不要使用通用的sonarsource/sonarcloud-github-action,改用.NET专用的扫描器,完整工作流示例如下:
name: .NET Build & SonarCloud Scan on: push: branches: [ main ] pull_request: branches: [ main ] jobs: build-and-scan: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 with: fetch-depth: 0 # 禁用浅克隆,保证重复代码、提交历史分析准确 - name: 安装SonarScanner for .NET run: dotnet tool install --global dotnet-sonarscanner - name: 设置.NET 6环境 uses: actions/setup-dotnet@v3 with: dotnet-version: 6.0.x - name: 启动SonarCloud扫描 run: | dotnet sonarscanner begin /k:"替换为你的SonarCloud项目Key" /o:"替换为你的SonarCloud组织名" \ /d:sonar.login="${{ secrets.SONAR_TOKEN }}" \ /d:sonar.host.url="https://sonarcloud.io" \ /d:sonar.cs.vstest.reportsPaths="**/TestResults/*.trx" \ /d:sonar.coverage.exclusions="**/Tests/**/*" \ /d:sonar.sources="./Backend" working-directory: Backend - name: 还原依赖 run: dotnet restore working-directory: Backend - name: 构建项目 run: dotnet build --no-restore working-directory: Backend - name: 执行测试并生成报告 run: dotnet test --no-build --verbosity normal --logger trx --collect:"XPlat Code Coverage" working-directory: Backend - name: 结束SonarCloud扫描并上报结果 run: dotnet sonarscanner end /d:sonar.login="${{ secrets.SONAR_TOKEN }}" working-directory: Backend env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
上述配置中的Sonar项目Key、组织名,可从SonarCloud对应项目的设置页面直接获取。
3. 补充配置校验
- 确认
sonar-project.properties中没有配置错误的排除规则,禁止把业务代码目录加到sonar.exclusions列表中 - 确认SonarCloud项目的规则集没有关闭代码异味、重复代码的检测开关,默认官方规则集已开启相关检测,自定义规则集需要手动校验规则状态
- 用于验证的测试坏代码不要放在测试项目中,Sonar默认会排除测试项目的代码异味检测,需要放到业务代码目录下才能被检测到
内容的提问来源于stack exchange,提问作者Andrei Curca
相关产品推荐
相关产品推荐

