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

Azure DevOps构建流水线:如何从代码覆盖率中排除文件夹

解决XPlat代码覆盖率中排除Migrations文件夹的问题

你遇到的问题是因为XPlat Code Coverage对配置节点的支持和你之前的写法不匹配,以下是可行的配置方案:

正确的cover.runsettings配置

针对Migrations文件夹的源文件,直接匹配源文件路径是最可靠的方式,同时可以兼容程序集排除(如果Migrations编译为独立程序集):

<DataCollector friendlyName="XPlat code coverage">
  <Configuration>
    <CodeCoverage>
      <!-- 排除所有路径包含Migrations的C#源文件 -->
      <Sources>
        <Exclude>
          <Source>.*Migrations.*\.cs$</Source>
        </Exclude>
      </Sources>
      <!-- 如果Migrations编译成单独的dll,添加此规则排除整个程序集 -->
      <ModulePaths>
        <Exclude>
          <ModulePath>.*Migrations\.dll$</ModulePath>
        </Exclude>
      </ModulePaths>
      <!-- 保留对[ExcludeFromCodeCoverage]属性的支持 -->
      <Attributes>
        <Exclude>
          <Attribute>System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute</Attribute>
        </Exclude>
      </Attributes>
    </CodeCoverage>
  </Configuration>
</DataCollector>

为什么之前的配置无效?

  1. ExcludeDirectories节点:XPlat Code Coverage并不支持这个节点,仅推荐使用Sources、ModulePaths来过滤代码覆盖率范围。
  2. 正则匹配精度不足:之前的.*Migrations.*没有限定文件类型,无法精准匹配到Migrations下的C#文件;如果Migrations和主程序集编译在一起,ModulePaths的规则也无法生效(因为程序集名称不含Migrations)。
  3. 路径匹配逻辑:XPlat的Sources节点基于编译时的源文件路径匹配,而非项目相对路径,.*Migrations.*\.cs$的正则可以覆盖各种路径格式的匹配。

额外验证步骤

  1. 本地运行测试命令,确认配置生效:
    dotnet test --configuration Release --settings ./cover.runsettings --collect:"XPlat Code Coverage"
    
  2. 查看生成的coverage.cobertura.xml文件,搜索"Migrations"关键字,确认没有相关类被统计。
  3. 流水线中确保cover.runsettings的路径正确,可改为绝对路径避免相对路径问题:
    arguments: '--configuration $(buildConfiguration) --settings $(System.DefaultWorkingDirectory)/cover.runsettings'
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 13:10:44