如何在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
相关产品推荐
相关产品推荐

