.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>
配置说明
- 匹配完整路径:dotnet代码覆盖率的
ModulePath正则匹配的是模块的完整磁盘路径(比如D:\a\1\s\bin\Debug\companyname.slnname.api.dll),而非仅文件名,所以必须用.*开头匹配任意路径前缀。 - 显式排除所有其他模块:默认情况下,Include规则是叠加而非替换原有默认规则,必须显式添加
.*的Exclude规则,才能确保只有Include匹配的模块被分析。 - 正则转义:文件名中的点号
.需要转义为\.,否则正则会将其视为任意字符,导致匹配范围超出预期。
验证与调试建议
- 查看详细日志:在测试命令中添加
--verbosity detailed,可以查看代码覆盖率收集器加载配置的过程,确认规则是否被正确应用。 - 测试正则匹配:复制目标模块的完整路径,用正则测试工具验证配置的正则是否能正确匹配。
内容的提问来源于stack exchange,提问作者something5143
相关产品推荐
相关产品推荐

