如何在Azure DevOps Pipeline的解决方案生成步骤中排除指定项目适配SonarQube分析
解决方案
方案1:使用SonarQube MSBuild扫描仪内置排除规则(无需修改生成逻辑,优先推荐)
在流水线的「准备SonarQube分析」步骤中,添加如下额外参数即可直接指定要排除的项目,扫描仪会自动跳过这些项目的分析,同时不会触发对应项目的生成校验:
/d:sonar.msbuild.excludeProjects="**/*Project4*.*proj;**/*Report*.csproj;**/*SQL*.sqlproj"
如果需要额外过滤特定类型的文件,可以追加参数:
/d:sonar.exclusions=**/*.sql,**/*.rdlc,**/*.rpt
方案2:调整MSBuild生成参数,跳过指定项目
你之前使用-target指定要生成的项目报错,通常是因为未完整列出项目依赖项,改用排除逻辑即可避免该问题,在「生成解决方案」步骤的MSBuild参数中添加:
-exclude:Project4;ReportProject;SQLProject -p:SkipInvalidConfigurations=true
如果是SQL Server项目类型无法生成,可额外追加参数直接跳过该类项目的生成校验:
-p:EnableSqlBuildTools=false -p:DeployOnBuild=false
方案3:修改项目文件实现条件化跳过
如果需要更灵活的控制逻辑,可以在需要排除的项目文件(.csproj/.sqlproj/.rdlcproj等)的顶层PropertyGroup节点中添加如下配置:
<PropertyGroup Condition="'$(IsSonarBuild)' == 'true'"> <BuildDependsOn /> <CoreBuildDependsOn /> <Build> <Message Text="Skipping $(ProjectName) during SonarQube analysis" Importance="high" /> </Build> </PropertyGroup>
之后在流水线的生成步骤参数中添加/p:IsSonarBuild=true即可,该配置仅会在Sonar流水线中生效,不影响本地正常生成。
过往方案失效原因说明
- 新建解决方案配置后未在Sonar准备步骤、生成步骤同时指定自定义配置名,导致流水线仍然使用默认的Debug/Release配置执行生成
- 使用
-target指定生成项目时未完整包含所有依赖项目,触发依赖缺失报错
内容的提问来源于stack exchange,提问作者Ph0b0x
相关产品推荐
相关产品推荐

