You need to enable JavaScript to run this app. 如何用dotnet dotcover test的--dcFilters排除代码覆盖率指定命名空间
优惠活动
大模型
产品
解决方案
定价
更多

如何用dotnet dotcover test的--dcFilters排除代码覆盖率指定命名空间

dotCover 2020.3.3 版本 --dcFilters 参数正确使用说明

dotCover 的覆盖率过滤逻辑是基于编译后程序集的类全限定名做匹配,不解析本地源代码的文件夹路径,绝大多数规则不生效的问题,本质都是语法格式不对、参数被Shell截断、匹配维度和目标不匹配导致的。

过滤器的固定语法要求

每个过滤项必须严格遵循三段式结构:
[过滤动作]:[匹配类型]=[匹配规则]
各部分不可错配的要求:

  • 过滤动作:- 代表排除匹配到的内容,+ 代表将匹配内容纳入覆盖率统计,动作标识必须放在最前,紧跟冒号
  • 匹配类型:
    • 取*c*时,代表按类的全限定名称(包含完整命名空间)做匹配
    • 取*a*时,代表按程序集的名称做匹配
  • 匹配规则:支持*通配符,可匹配任意长度的字符
  • 多个过滤项之间用分号;分隔,所有过滤内容必须包裹在同一对外层引号内,避免被Shell解析截断

适配你解决方案的可直接套用的命令

结合你给出的项目结构,需要排除三个指定命名空间的完整执行命令为:

dotnet dotcover test \
  --dcReportType=HTML \
  --dcOutput=./coverage/result.html \
  --dcFilters="-:c=AClient.Repository.Extensions.*;-:c=AClient.Repository.Models.*;-:c=AClient.Repository.UnitTests.*"

注意:填写测试项目的排除规则时,不要凭项目文件名主观推断命名空间。你提到的测试项目为AClient.Repository.UnitTests.csproj,其默认生成的根命名空间为AClient.Repository.UnitTests,需匹配项目内任意.cs文件顶部声明的实际namespace值,才能保证规则命中。

导致规则失效的常见踩坑场景

  • 格式顺序颠倒:把排除标识-放到匹配规则的位置,比如误写为c=-:AClient.Repository.Extensions.*,这类格式会被dotCover判定为无效规则,直接跳过
  • 误用文件路径匹配:比如写-:c=**/Models/**/*.cs这类路径规则,2020.3.3版本的dotCover CLI不解析源代码文件路径,这类规则永远不会触发匹配
  • 拆分传递参数:该版本不支持多次传入--dcFilters参数,后一次传值会直接覆盖前一次的配置,必须把所有过滤规则拼接在同一个参数值字符串内
  • 缺少外层引号:在GitLab CI的Shell执行环境下,未加引号的分号会被识别为独立命令的分隔符,最终只有第一个过滤规则生效,后续所有规则都会丢失
  • 单靠命名空间匹配测试项目:更稳妥的排除方式是直接按程序集维度过滤,对应增加规则-:a=AClient.Repository.UnitTests,哪怕后续调整了测试项目的命名空间,也不会出现漏排除的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 15:06:08