有没有一种方法可以使用 MSBuild 扫描器以编程方式从 Sonar 分析中排除工件?
我们的 git 存储库中有许多不同的 Visual Studio 解决方案。几乎所有这些解决方案都使用包含共享代码的项目。我希望从这些常见项目中排除代码覆盖率 - 但仅限于某些 Sonar 项目。
总是排除一个项目很简单并且documented通过添加 <PropertyGroup>
.csproj
部分.
添加 /d:sonar.coverage.exclusions="**/MyCommonCode/**"
MSBuild 扫描器的参数似乎什么都不做,也不在 Sonar 本身中添加排除模式。
基本原理
我希望为使用这些常见项目的代码维护准确的代码覆盖率指标。如果通用代码有 100,000 行并且测试良好,但我的项目只有 10,000 行并且测试为零,那么 Sonar 代码覆盖率会人为地偏高。
相反,我打算有一个单独的 Sonar 项目,只包含这个通用代码的覆盖范围。
我们使用的是 SonarQube 7.0 和适用于 MSBuild 4.0.2 的 SonarScanner。
最佳答案
您可以向您引用的 MSBuild 片段添加条件,并使用它来控制常见项目是否包含在分析中,例如
<PropertyGroup>
<!-- Exclude the project from analysis -->
<SonarQubeExclude Condition="$(ExcludeCommonCode)=='true'" >true</SonarQubeExclude>
</PropertyGroup>
...然后将参数 /p:ExcludeCommonCode=true 传递给 MSBuild,以构建您不想分析其公共(public)代码的解决方案。
以这种方式排除常见项目不仅仅是将这些项目从代码覆盖范围中排除:这意味着根本不会分析代码(没有问题也没有指标),并且那些 MSBuild 项目不会出现在该项目下SonarQube 项目。但是,如果您有一个单独的 SonarQube 项目来分析常见项目,我想这就是您想要的。
关于c# - SonarQube MSBuild runner 中的编程覆盖排除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50499737/