SonarScanner分析C#和C++混合项目时重复索引文件报错求助
解决SonarScanner分析C#/C++混合项目时的文件重复索引错误
问题背景
使用Azure Pipeline分析C#和C++混合项目时,SonarScanner执行阶段报错,提示文件被重复索引:
ERROR: File HPCEMConnectionWizardWin/HPCEMConnectionWizardWin/App.config can’t be indexed twice. Please check that inclusion/exclusion patterns produce disjoint sets for main and test files
更新SonarQube配置,指定具体源码目录后,仍触发类似错误:
ERROR: File HPCEMConnectionWizardWin/src/HPCEMConnectionWizardLauncher/framework.h can't be indexed twice. Please check that inclusion/exclusion patterns produce disjoint sets for main and test files
项目代码结构:
- C#代码(*.cs):
- HPCEMConnectionWizardWin/HPCEMConnectionWizardWin/Model/
- HPCEMConnectionWizardWin/HPCEMConnectionWizardWin/View/
- HPCEMConnectionWizardWin/HPCEMConnectionWizardWin/ViewModel/
- C++代码(.cpp,.h):
- HPCEMConnectionWizardWin/src/
问题根源
- 重复的Sonar配置任务:同时使用
SonarQubePrepare@5和手动调用SonarScanner.MSBuild.exe,两者配置重叠导致文件被多次标记为待扫描。 - 模糊的扫描范围:初始配置
cliSources="."会包含所有文件,包括无关配置文件、依赖库;后续指定sonar.sources时,未完全排除重复路径或无关文件。
修复方案
1. 清理重复的Sonar配置任务
保留手动调用SonarScanner.MSBuild.exe的方式(更适配C++/C#混合项目的构建扫描流程),删除以下冗余任务:
SonarQubePrepare@5SonarQubeAnalyze@5SonarQubePublish@5sonar-buildbreaker@8
2. 精确配置扫描范围
在SonarScanner.MSBuild.exe begin命令中,通过/d参数明确:
sonar.sources:严格指定需要分析的主源码目录sonar.exclusions:排除配置文件、第三方依赖等无需扫描的文件- 若项目无测试代码,无需设置
sonar.testSources;若有,确保其路径与sonar.sources完全不重叠
3. 优化构建包裹逻辑
确保build-wrapper仅包裹目标项目的构建,避免重复构建导致文件被多次索引。
修改后的Pipeline关键步骤
# 替换原有Sonar相关任务为以下内容 - task: CmdLine@2 inputs: script: | SonarScanner\SonarScanner.MSBuild.exe begin /k:"xxx_HPCEMConnectionWizardWin" /n:"HPCEMConnectionWizardWin\HPCEMConnectionWizardWin.sln" /v:"1.0" ^ /d:sonar.cfamily.build-wrapper-output="bw-output" ^ /d:sonar.java.file.suffixes="-" ^ /d:sonar.sources="HPCEMConnectionWizardWin/src/,HPCEMConnectionWizardWin/HPCEMConnectionWizardWin/Model/,HPCEMConnectionWizardWin/HPCEMConnectionWizardWin/View/,HPCEMConnectionWizardWin/HPCEMConnectionWizardWin/ViewModel/" ^ /d:sonar.exclusions="**/App.config,**/KHPLib/**" ^ /d:sonar.verbose=true build-wrapper-win-x86\build-wrapper-win-x86-64.exe --out-dir bw-output ^ "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\Bin\MSBuild.exe" ^ HPCEMConnectionWizardWin\HPCEMConnectionWizardWin.sln ^ -t:Rebuild /p:configuration=release /p:platform=x64 SonarScanner\SonarScanner.MSBuild.exe end
额外排查建议
- 查看verbose日志,确认哪些文件被重复扫描,针对性调整排除规则。
- 检查Pipeline中是否有重复的文件拷贝或构建步骤,避免同一文件出现在多个扫描路径中。
内容的提问来源于stack exchange,提问作者Ming
相关产品推荐
相关产品推荐

