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

如何在Azure Pipeline中用SonarQube分别分析C++与C#项目

解决方案:拆分SonarQube分析任务(C++ + .NET)

问题背景

工程包含3个C子项目和1个C#主项目,原Azure Pipeline用C扫描器全量分析所有项目,触发警告:C#文件无法被当前扫描器分析,需使用SonarScanner for .NET 5.x及以上版本

原YAML代码

trigger:
- main

pool:
  vmImage: 'windows-latest'

steps:
- task: SonarQubePrepare@5
  inputs:
    SonarQube: 'SonarQube服务连接'
    scannerMode: 'CLI'
    configMode: 'manual'
    cliProjectKey: 'your-project-key'
    cliProjectName: 'your-project-name'
    cliSources: '.'
    extraProperties: |
      sonar.cfamily.build-wrapper-output=build_wrapper_output
      sonar.language=cpp

- task: CmdLine@2
  inputs:
    script: |
      build-wrapper-win-x86-64.exe --out-dir build_wrapper_output msbuild /t:Rebuild /p:Configuration=Release

- task: SonarQubeAnalyze@5

修改后的YAML代码

核心逻辑:拆分两次独立的SonarQube分析流程,分别处理C++子项目和C#主项目,通过不同项目Key隔离分析结果。

trigger:
- main

pool:
  vmImage: 'windows-latest'

# 第一阶段:分析3个C++子项目
steps:
- task: SonarQubePrepare@5
  displayName: 'SonarQube 初始化 - C++子项目'
  inputs:
    SonarQube: 'SonarQube服务连接'
    scannerMode: 'CLI'
    configMode: 'manual'
    cliProjectKey: 'your-project-cpp' # 独立的C++项目标识
    cliProjectName: 'your-project-cpp'
    cliSources: './cpp-sub1,./cpp-sub2,./cpp-sub3' # 明确指定C++子项目路径
    extraProperties: |
      sonar.cfamily.build-wrapper-output=build_wrapper_cpp
      sonar.language=cpp

- task: CmdLine@2
  displayName: 'Build C++子项目(带Build Wrapper)'
  inputs:
    script: |
      build-wrapper-win-x86-64.exe --out-dir build_wrapper_cpp msbuild ./cpp-sub1/cpp1.vcxproj ./cpp-sub2/cpp2.vcxproj ./cpp-sub3/cpp3.vcxproj /t:Rebuild /p:Configuration=Release

- task: SonarQubeAnalyze@5
  displayName: 'SonarQube 分析 - C++子项目'

- task: SonarQubePublish@5
  displayName: 'SonarQube 提交C++结果'
  inputs:
    pollingTimeoutSec: '300'

# 第二阶段:分析C#主项目
- task: SonarQubePrepare@5
  displayName: 'SonarQube 初始化 - C#主项目'
  inputs:
    SonarQube: 'SonarQube服务连接'
    scannerMode: 'MSBuild' # 切换为.NET扫描器模式
    projectKey: 'your-project-csharp' # 独立的C#项目标识
    projectName: 'your-project-csharp'
    projectVersion: '1.0'

- task: MSBuild@1
  displayName: 'Build C#主项目'
  inputs:
    solution: './csharp-main/MainProject.sln'
    configuration: 'Release'

- task: SonarQubeAnalyze@5
  displayName: 'SonarQube 分析 - C#主项目'

- task: SonarQubePublish@5
  displayName: 'SonarQube 提交C#结果'
  inputs:
    pollingTimeoutSec: '300'

关键修改说明

  • 任务拆分:将原单一分析流程拆分为C++、C#两个独立阶段,各自完成「初始化→构建→分析→提交」全流程
  • 扫描器适配:C++保留CLI模式+build-wrapper,C#切换为MSBuild模式(自动调用SonarScanner for .NET)
  • 路径隔离:C++阶段仅扫描指定子项目路径,避免触及C#文件;C#阶段单独指向主项目解决方案
  • 结果隔离:为两类项目设置不同projectKey,确保SonarQube中生成独立的分析报告(也可根据需求调整为同一项目下的分支/参数区分)

原警告日志示例

WARN: File 'MainProject/Program.cs' cannot be analyzed by the current scanner. Please use SonarScanner for .NET 5.x or later.

原分析警告截图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 18:13:13