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

.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 04:42:40