SonarQube MSBuild runner 中的编程覆盖排除

Programmatic coverage exclusions in SonarQube MSBuild runner

有没有一种方法可以使用 MSBuild 扫描程序以编程方式从 Sonar 分析中排除工件?

我们的 git 存储库中有许多不同的 Visual Studio 解决方案。几乎所有这些解决方案都使用包含共享代码的项目。我希望从这些常见项目中排除代码覆盖率 - 但仅限于某些 Sonar 项目。

始终排除项目很简单,documented 通过在 .csproj 中添加 <PropertyGroup> 部分。

向 MSBuild 扫描器添加 /d:sonar.coverage.exclusions="**/MyCommonCode/**" 参数似乎没有任何作用,在 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,以构建您不想分析公共代码的解决方案。

以这种方式排除常见项目不仅仅是将这些项目排除在代码覆盖范围之外:这意味着根本不会分析代码(没有问题也没有指标),并且不会出现那些 MSBuild 项目在那个 SonarQube 项目下。但是,如果您有一个单独的 SonarQube 项目来分析常见项目,我想这就是您想要的。