如何配置Sonar Scanner for .NET纳入非当前.NET解决方案的项目分析
解决SonarQube纳入独立.NET项目生成单一分析报告的问题
问题根源
你遇到的File "..." can't be indexed twice报错,是因为SonarScanner for MSBuild会自动索引解决方案关联的所有文件,手动配置sonar.sources会让部分文件被重复标记为“主文件”,触发索引冲突。
可行解决方案
方案1:合并解决方案(推荐)
直接把MyProject.Services目录下的所有项目添加到根目录的MyProject.sln中:
- 打开Visual Studio,加载
MyProject.sln - 右键解决方案 → 添加 → 现有项目,选中
MyProject.Services下的所有.csproj/.vbproj文件 - 保存解决方案后,构建脚本只需针对
MyProject.sln执行Sonar扫描流程,无需额外配置,就能自动包含所有项目的分析。
方案2:不合并解决方案,扫描多个项目
利用SonarScanner for MSBuild支持同一扫描周期内处理多个解决方案的特性,修改PowerShell脚本:
# 初始化Sonar扫描(不要加sonar.sources参数) & "C:\sonar-scanner-msbuild-4.6.0.1930-net46\SonarScanner.MSBuild.exe" begin ` /k:"你的Sonar项目Key" ` /n:"MyProject" ` /v:"当前版本号" # 构建根目录解决方案 & "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin\MSBuild.exe" "MyProject.sln" /t:Rebuild /p:Configuration=Release # 构建Services目录下的解决方案 & "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin\MSBuild.exe" "MyProject.Services\MyProject.Services.sln" /t:Rebuild /p:Configuration=Release # 结束扫描并上传结果到SonarQube & "C:\sonar-scanner-msbuild-4.6.0.1930-net46\SonarScanner.MSBuild.exe" end
- 注意:如果两个解决方案存在重复引用的项目(比如Model项目同时出现在两个sln里),需要在Sonar参数中添加
sonar.exclusions排除其中一组重复文件,或者确保只在一个解决方案中包含该项目。
关键注意事项
- 绝对不要在使用SonarScanner for MSBuild扫描解决方案时,同时配置
sonar.sources参数,这是触发重复索引报错的核心原因。 - 确保Bamboo构建任务的工作目录是
MyProject根目录,避免路径错误导致的文件索引问题。
内容的提问来源于stack exchange,提问作者Hashmat Ali
相关产品推荐
相关产品推荐

