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

为什么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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:09:06