You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过SonarScanner for MSBuild编程排除指定项目的代码覆盖率分析?

解决SonarQube部分项目排除公共代码覆盖率的问题

我之前在维护多Visual Studio解决方案+共享代码项目的Sonar分析时,也碰到过一模一样的问题——公共代码的高覆盖率把业务项目的覆盖率拉得虚高,想单独统计公共代码的覆盖率,又不想永久修改.csproj配置。结合你用的SonarQube 7.0和SonarScanner for MSBuild 4.0.2版本,给你几个经过验证的解决思路:

方法1:精准传递sonar.coverage.exclusions参数

你之前用的**/MyCommonCode/**可能匹配范围太宽泛,或者路径格式没贴合Sonar识别的文件结构。试试把参数细化成针对代码文件的精准匹配,并且一定要在begin步骤传递:

SonarScanner.MSBuild.exe begin /k:"你的Sonar项目Key" /d:sonar.coverage.exclusions="**/MyCommonCode/**/*.cs"

注意:路径要和SonarQube界面里显示的公共代码文件路径一致(比如如果Sonar里显示的是src/MyCommonCode/Utils.cs,就用src/MyCommonCode/**/*.cs)。如果是在CI脚本里,还可以根据项目Key动态判断是否添加这个参数,只给需要排除的项目生效。

方法2:通过测试.runsettings文件排除公共项目

这个方法从覆盖率数据源头入手,让测试工具(比如VSTest)直接不收集公共项目的覆盖率,Sonar自然就不会统计了。创建一个ExcludeCommonCode.runsettings文件:

<RunSettings>
  <DataCollectionRunSettings>
    <DataCollectors>
      <DataCollector friendlyName="Code Coverage">
        <Configuration>
          <CodeCoverage>
            <ModulePaths>
              <Exclude>
                <!-- 匹配公共项目的输出DLL -->
                <ModulePath>.*MyCommonCode\.dll$</ModulePath>
              </Exclude>
            </ModulePaths>
          </CodeCoverage>
        </Configuration>
      </DataCollector>
    </DataCollectors>
  </DataCollectionRunSettings>
</RunSettings>

然后运行测试时指定这个文件:

vstest.console.exe 你的测试项目.dll /Settings:ExcludeCommonCode.runsettings

这种方式的好处是,不会影响Sonar对公共项目的代码质量分析,只是排除覆盖率统计。

方法3:用覆盖率工具(如OpenCover)直接排除

如果你用的是OpenCover这类第三方覆盖率工具,可以在生成覆盖率报告时直接排除公共项目的程序集:

OpenCover.Console.exe -target:"vstest.console.exe" -targetargs:"你的测试项目.dll" -filter:"-[MyCommonCode]*"

这里的-[MyCommonCode]*表示排除所有属于MyCommonCode程序集的代码,生成的覆盖率报告里就不会包含公共代码的数据,Sonar导入后自然就不会统计了。

这几个方法都能实现“仅部分Sonar项目排除公共代码覆盖率”的需求,你可以根据自己的CI流程选最顺手的。

内容的提问来源于stack exchange,提问作者nullPainter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:59:59