.NET 9.0代码覆盖率报告如何忽略无测试的编译文件?
解决ASP.NET Core 9 Web API在Azure DevOps中代码覆盖率错误收集.g.cs文件的问题
1. 修正.runsettings的排除规则
针对生成的.g.cs文件(如Mediator自动生成代码)及第三方库,调整.runsettings的正则匹配规则,确保精准排除:
<?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> <CodeCoverage> <!-- 排除所有.g.cs生成文件 --> <Exclude> <ModulePath>.*\.g\.cs$</ModulePath> <!-- 排除第三方依赖库 --> <ModulePath>.*MediatR.*</ModulePath> <ModulePath>.*Microsoft\.Extensions.*</ModulePath> <ModulePath>.*System.*</ModulePath> </Exclude> <!-- 仅包含自身项目程序集(替换为你的项目名称) --> <Include> <ModulePath>.*YourApiProjectName\.dll$</ModulePath> </Include> <UseVerifiableInstrumentation>True</UseVerifiableInstrumentation> <AllowLowIntegrityProcesses>True</AllowLowIntegrityProcesses> <CollectFromChildProcesses>True</CollectFromChildProcesses> <CollectAspNetCore>True</CollectAspNetCore> </CodeCoverage> </Configuration> </DataCollector> </DataCollectors> </DataCollectionRunSettings> </RunSettings>
注意要点:
- 正则表达式需转义特殊字符(如
.要写成\.),确保匹配准确 Include节点仅保留你的业务项目程序集,从根源减少误统计
2. 在Azure DevOps流水线中指定配置文件
确保测试任务正确加载.runsettings,以DotNetCoreCLI任务为例,添加--settings参数指定配置文件路径:
- task: DotNetCoreCLI@2 displayName: '运行测试并生成覆盖率报告' inputs: command: 'test' projects: '**/*Tests.csproj' arguments: '--configuration $(BuildConfiguration) --settings $(Build.SourcesDirectory)/YourSolution/Your.runsettings --collect:"XPlat Code Coverage"' publishTestResults: true
若使用Visual Studio Test任务,需在SettingsFile字段中配置.runsettings的路径。
3. 排查配置失效的常见原因
- 路径错误:确认
.runsettings的路径在Azure DevOps中可被访问,建议使用相对路径或流水线变量(如$(Build.SourcesDirectory)) - 正则不匹配:检查
Exclude中的正则是否覆盖目标文件/程序集,可在本地测试正则表达式的匹配结果 - 工具冲突:若使用Coverlet作为覆盖率工具,需额外在命令行添加排除参数
--exclude "**/*.g.cs",或在.runsettings中添加Coverlet专属配置 - 缓存残留:清理Azure DevOps流水线缓存后重新运行,避免旧配置干扰
4. 本地验证配置有效性
在本地运行测试并生成覆盖率报告,确认.runsettings规则生效:
dotnet test --settings Your.runsettings --collect:"XPlat Code Coverage"
查看生成的coverage.cobertura.xml文件,确认.g.cs文件已被排除。
内容的提问来源于stack exchange,提问作者pickYourCode
相关产品推荐
相关产品推荐

