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

Azure DevOps管道代码覆盖率如何排除第三方DLL文件

Azure DevOps 管道Cobertura覆盖率排除第三方DLL配置方法

问题原因

当前使用的VSTest@2任务仅配置了测试程序集的筛选规则,未给代码覆盖率采集器指定程序集排除规则,默认会把测试进程加载到的所有带PDB的程序集(包括第三方依赖DLL)都纳入覆盖率统计,因此最终报告会出现FluentAssertions、Microsoft.Azure等非业务代码的覆盖率数据。

配置方法

有两种可行的配置方式,按需选择即可:

方式1:直接在VSTest任务参数内追加排除规则(适合规则少的场景)

修改VSTest任务的otherConsoleOptions字段,在原有采集参数后追加Exclude配置,把要排除的第三方程序集匹配规则写进去,规则格式为[程序集通配符]类型通配符,多个规则用分号分隔。
修改后的VSTest任务片段参考:

- task: VSTest@2
  displayName: 'Run .NET Core Unit Tests $(ucSolution)'
  continueOnError: true
  inputs:
    testSelector: 'testAssemblies'
    testAssemblyVer2: |
      **\MyApp.*.UnitTests.dll
      !**\*TestAdapter.dll
      !**\obj\**
      !**\ref\**
    searchFolder: '$(System.DefaultWorkingDirectory)'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'
    diagnosticsEnabled: true
    rerunFailedTests: true
    rerunFailedThreshold: '10'
    rerunMaxAttempts: '1'
    resultsFolder: '$(build.ArtifactStagingDirectory)\Test\Results\core'
    otherConsoleOptions: '/collect:"Code Coverage;Format=Cobertura;Exclude=[FluentAssertions*]*;[Microsoft.Azure*]*;[*Tests*]*;[*TestAdapter*]*;[Newtonsoft.Json*]*;[Moq*]*"'

常用排除规则可按需追加:

  • [FluentAssertions*]*:排除FluentAssertions相关所有程序集
  • [Microsoft.Azure*]*:排除所有Azure SDK相关程序集
  • [*Tests*]*:排除测试项目本身的程序集
  • 第三方库规则统一遵循[DLL名称前缀*]*格式编写即可

方式2:使用.runsettings配置文件(适合规则多、需要长期维护的场景)

如果排除规则较多,写在命令行参数里可读性差,可以在代码仓库根目录添加.runsettings配置文件,在文件内配置覆盖率排除规则,然后在VSTest任务里指定该配置文件即可。

  1. 新建.runsettings文件,内容参考:
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
  <DataCollectionRunSettings>
    <DataCollectors>
      <DataCollector friendlyName="Code Coverage" uri="datacollector://Microsoft/CodeCoverage/2.0" assemblyQualifiedName="Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector, Microsoft.VisualStudio.TraceCollector, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
        <Configuration>
          <CodeCoverage>
            <Format>Cobertura</Format>
            <!-- 配置要排除的程序集/模块 -->
            <ModulePaths>
              <Exclude>
                <ModulePath>.*FluentAssertions.*</ModulePath>
                <ModulePath>.*Microsoft\.Azure.*</ModulePath>
                <ModulePath>.*TestAdapter.*</ModulePath>
                <ModulePath>.*moq.*</ModulePath>
                <ModulePath>.*Newtonsoft\.Json.*</ModulePath>
              </Exclude>
            </ModulePaths>
            <!-- 也可以按命名空间、特性排除,比如排除自动生成的代码 -->
            <Functions>
              <Exclude>
                <Function>.*\.g\..*</Function>
              </Exclude>
            </Functions>
          </CodeCoverage>
        </Configuration>
      </DataCollector>
    </DataCollectors>
  </DataCollectionRunSettings>
</RunSettings>
  1. 修改VSTest任务,指定runSettingsFile参数指向该配置文件,同时简化otherConsoleOptions:
- task: VSTest@2
  displayName: 'Run .NET Core Unit Tests $(ucSolution)'
  continueOnError: true
  inputs:
    testSelector: 'testAssemblies'
    testAssemblyVer2: |
      **\MyApp.*.UnitTests.dll
      !**\*TestAdapter.dll
      !**\obj\**
      !**\ref\**
    searchFolder: '$(System.DefaultWorkingDirectory)'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'
    diagnosticsEnabled: true
    rerunFailedTests: true
    rerunFailedThreshold: '10'
    rerunMaxAttempts: '1'
    resultsFolder: '$(build.ArtifactStagingDirectory)\Test\Results\core'
    runSettingsFile: '$(System.DefaultWorkingDirectory)/.runsettings'
    otherConsoleOptions: '/collect:"Code Coverage"'

补充说明

  • PublishCodeCoverageResults@1任务本身不支持过滤覆盖率数据,所有过滤规则必须在VSTest执行测试、生成Cobertura XML报告的环节配置,发布环节只会原样上传生成的报告文件。
  • 配置完成后重新运行管道,第三方DLL的覆盖率数据就不会出现在最终报告中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 20:01:22