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

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/

问题根源

  1. 重复的Sonar配置任务:同时使用SonarQubePrepare@5和手动调用SonarScanner.MSBuild.exe,两者配置重叠导致文件被多次标记为待扫描。
  2. 模糊的扫描范围:初始配置cliSources="."会包含所有文件,包括无关配置文件、依赖库;后续指定sonar.sources时,未完全排除重复路径或无关文件。

修复方案

1. 清理重复的Sonar配置任务

保留手动调用SonarScanner.MSBuild.exe的方式(更适配C++/C#混合项目的构建扫描流程),删除以下冗余任务:

  • SonarQubePrepare@5
  • SonarQubeAnalyze@5
  • SonarQubePublish@5
  • sonar-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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 07:00:23