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

Azure DevOps代码覆盖率如何排除NuGet包,仅统计指定自定义DLL?

解决Azure DevOps中DotNet Test代码覆盖率过滤外部依赖的问题

默认情况下,DotNet Test的代码覆盖率收集器会统计所有被测试项目引用的程序集(包括NuGet包),导致你的覆盖率被外部依赖拉低。可以通过以下两种方式精准指定统计范围:

方法一:直接在Test命令中添加过滤参数

修改YAML任务的arguments,通过数据收集器参数显式指定需要统计的程序集:

- stage: Test_application
  jobs:
  - job:
    steps:
    - task: DotNetCoreCLI@2
      displayName: 'DotNet Test'
      inputs:
        command: 'test'
        arguments: '--configuration Release --collect "Code coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Include="[MyLibrary.One.dll],[MyLibrary.Two.dll],[MyLibrary.Three.dll],[MyLibrary.Four.dll]"'
        projects: '**/MyLibrary.UnitTest.*.csproj'
  • -- 用于分隔DotNet Test命令参数和数据收集器的配置参数
  • Include 字段指定仅统计你列出的四个业务dll,自动排除外部依赖(如DiffEngine、Moq、Shouldly)和测试项目自身的dll

如果偏好排除规则(而非指定包含项),可以替换为:

-- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude="[DiffEngine*],[Moq*],[Shouldly*],[MyLibrary.UnitTest*]"

方法二:使用.runsettings配置文件(推荐复杂规则场景)

这种方式更灵活,适合需要多规则过滤的场景:

  1. 在项目根目录创建CodeCoverage.runsettings文件,内容如下:
<RunSettings>
  <DataCollectionRunSettings>
    <DataCollectors>
      <DataCollector friendlyName="Code Coverage" uri="datacollector://Microsoft/CodeCoverage/2.0" assemblyQualifiedName="Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector, Microsoft.VisualStudio.TraceCollector, Version=17.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
        <Configuration>
          <!-- 仅统计指定的业务dll -->
          <Include>
            <ModulePaths>
              <Include>.*MyLibrary\.One\.dll$</Include>
              <Include>.*MyLibrary\.Two\.dll$</Include>
              <Include>.*MyLibrary\.Three\.dll$</Include>
              <Include>.*MyLibrary\.Four\.dll$</Include>
            </ModulePaths>
          </Include>
          <!-- 可选:用排除规则替代Include -->
          <!--
          <Exclude>
            <ModulePaths>
              <Exclude>.*DiffEngine.*\.dll$</Exclude>
              <Exclude>.*Moq.*\.dll$</Exclude>
              <Exclude>.*Shouldly.*\.dll$</Exclude>
              <Exclude>.*MyLibrary\.UnitTest.*\.dll$</Exclude>
            </ModulePaths>
          </Exclude>
          -->
        </Configuration>
      </DataCollector>
    </DataCollectors>
  </DataCollectionRunSettings>
</RunSettings>
  1. 修改YAML任务,指定使用该配置文件:
- stage: Test_application
  jobs:
  - job:
    steps:
    - task: DotNetCoreCLI@2
      displayName: 'DotNet Test'
      inputs:
        command: 'test'
        arguments: '--configuration Release --collect "Code coverage" --settings CodeCoverage.runsettings'
        projects: '**/MyLibrary.UnitTest.*.csproj'

配置完成后重新运行流水线,代码覆盖率统计将仅包含你指定的四个业务dll,预期会达到31.61%的目标值。

内容的提问来源于stack exchange,提问作者H. Pauwelyn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 23:43:22