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

.NET CLI代码覆盖率分析Include模块配置失效求助

解决dotnet test代码覆盖率白名单配置无效问题

当前使用的测试命令

dotnet test D:\a\1\s\OurSln.sln 
    --logger trx --results-directory D:\a\_temp
    --configuration debug
    --collect "Code Coverage"
    -s D:\a\1\s/CodeCoverage.runsettings
    -m:1
    --no-build

问题背景

第三方库拉低代码覆盖率约35%,原本通过排除列表过滤但需持续新增规则,希望改用白名单模式,仅包含以companyname.slnname和specialname.common开头的DLL/EXE,但多次配置Include正则均无效,所有模块仍被分析。

无效配置回顾

尝试过的几种无效配置:
1.

<ModulePaths>
  <Include>
    <ModulePath>.*companyname.slnname.*</ModulePath>
    <ModulePath>.*specialname.common.*</ModulePath>
  </Include>
</ModulePaths>
<ModulePaths>
  <Include>
    <ModulePath>^companyname\.slnname.*\.dll$</ModulePath>
    <ModulePath>^companyname\.slnname.*\.exe$</ModulePath>
    <ModulePath>^specialname\.common.*\.dll$</ModulePath>
  </Include>
</ModulePaths>
<ModulePaths>
  <Include>
    <ModulePath>companyname.slnname.*\.dll$</ModulePath>
    <ModulePath>companyname.slnname.*\.exe$</ModulePath>
    <ModulePath>specialname.common.*\.dll$</ModulePath>
  </Include>
</ModulePaths>

正确的白名单配置方案

核心配置代码

<?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=17.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
        <Configuration>
          <ModulePaths>
            <Include>
              <!-- 匹配任意路径下,以companyname.slnname开头的dll/exe -->
              <ModulePath>.*companyname\.slnname.*\.(dll|exe)$</ModulePath>
              <!-- 匹配任意路径下,以specialname.common开头的dll -->
              <ModulePath>.*specialname\.common.*\.dll$</ModulePath>
            </Include>
            <!-- 显式排除所有未被Include匹配的模块 -->
            <Exclude>
              <ModulePath>.*</ModulePath>
            </Exclude>
          </ModulePaths>
          <!-- 可添加其他代码覆盖率配置,比如排除测试项目等 -->
        </Configuration>
      </DataCollector>
    </DataCollectors>
  </DataCollectionRunSettings>
</RunSettings>

配置说明

  1. 匹配完整路径:dotnet代码覆盖率的ModulePath正则匹配的是模块的完整磁盘路径(比如D:\a\1\s\bin\Debug\companyname.slnname.api.dll),而非仅文件名,所以必须用.*开头匹配任意路径前缀。
  2. 显式排除所有其他模块:默认情况下,Include规则是叠加而非替换原有默认规则,必须显式添加.*的Exclude规则,才能确保只有Include匹配的模块被分析。
  3. 正则转义:文件名中的点号.需要转义为\.,否则正则会将其视为任意字符,导致匹配范围超出预期。

验证与调试建议

  • 查看详细日志:在测试命令中添加--verbosity detailed,可以查看代码覆盖率收集器加载配置的过程,确认规则是否被正确应用。
  • 测试正则匹配:复制目标模块的完整路径,用正则测试工具验证配置的正则是否能正确匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 09:48:14