使用SonarQube扫描多项目.NET解决方案中的单个项目问题咨询
解决.NET单项目构建时仅推送对应SonarQube指标的问题
我之前帮团队处理过完全相同的场景——多项目.NET方案拆分单独VSTS构建,却被SonarQube默认全方案扫描坑过,下面这几个步骤能精准解决你的需求:
1. 锁定SonarQube的扫描范围
在VSTS构建定义的「Prepare Analysis Configuration」步骤里,找到Additional Properties输入框,添加针对性配置:
- 如果想通过项目名称过滤,用这两行:
把sonar.inclusions=**/YourTargetProject/**/*.cs sonar.exclusions=**/!YourTargetProject/**/*.csYourTargetProject替换成你实际的项目名称,这样SonarQube只会扫描这个项目下的所有C#文件,自动排除其他项目。 - 更直接的方式是指定单个项目文件:
这种方式会让SonarQube完全基于指定的sonar.msbuild.projectFilePath=./src/YourTargetProject/YourTargetProject.csproj.csproj分析,彻底和解决方案的其他项目划清界限。
2. 确保构建步骤只处理单个项目
别再用解决方案文件(.sln)作为MSBuild的目标了,直接指定目标项目的.csproj:
msbuild ./src/YourTargetProject/YourTargetProject.csproj /p:Configuration=Release
这样构建过程只编译目标项目,既节省时间,也让SonarQube的扫描上下文更明确,不会误抓其他项目的信息。
3. 给每个项目分配独立的SonarQube项目密钥
去SonarQube服务器上,为每个.NET项目单独创建一个SonarQube项目,每个项目都有唯一的Project Key。然后在对应VSTS构建定义的SonarQube准备步骤里,把Project Key和Project Name都设置成这个项目对应的SonarQube配置。这样每个构建推送的指标会精准关联到SonarQube上的对应项目,不会和其他项目的数据混在一起。
4. 验证结果
跑一次目标项目的构建,完成后去SonarQube服务器上查看对应项目的仪表盘,确认只有这个项目的代码分析数据被更新,其他项目的指标没有变化就OK了。
额外注意
如果你的项目有依赖项,记得在构建步骤前加上NuGet还原,确保依赖能正常获取;如果是.NET Core项目,把MSBuild命令换成dotnet build,SonarQube的附加属性配置是通用的。
内容的提问来源于stack exchange,提问作者Bart Huiskes
相关产品推荐
相关产品推荐

