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

配置Runsettings仅统计Adaptive项目代码覆盖率却生成空结果排查

问题:Runsettings配置代码覆盖率为空的排查与修复

需求说明

需要配置Runsettings文件,实现:

  • 仅输出名称包含Adaptive的项目的代码覆盖率
  • 排除所有测试项目
  • 仅扫描当前解决方案本地的src目录

当前配置与文件夹结构

现有Runsettings配置

<CodeCoverage>
    <ModulePaths>
        <Include>
            <ModulePath>.*Adaptive.*\.dll</ModulePath>
        </Include>
        <Exclude>
            <ModulePath>.*Tests.*</ModulePath>
        </Exclude>
    </ModulePaths>
    <Attributes>
      <Exclude>
        <Attribute>^System\.Diagnostics\.CodeAnalysis\.ExcludeFromCodeCoverageAttribute$</Attribute>
      </Exclude>
    </Attributes>
</CodeCoverage>

本地文件夹结构

Adaptive.sln
src\Adaptive.Something\Adaptive.Something.csproj
src\Adaptive.Nested\Adaptive.SomethingOtherThing\Adaptive.SomethingOtherThing.csproj
src\UnitTests.Adaptive.Something.csproj
tests\UnitTests.Adaptive.Something.csproj

配置错误分析

  1. 未限定源代码目录:现有配置仅过滤dll名称,未限定仅扫描src目录下的项目代码,可能导致漏扫或匹配非目标文件。
  2. 测试项目排除逻辑不足:src目录下的测试项目编译后dll同时包含Adaptive和Tests,现有Exclude规则可能因正则覆盖范围问题,无法完全排除这类测试dll。
  3. 缺少源代码路径过滤:仅靠ModulePath(dll路径)过滤不够,需配合Sources节点限定源代码所在目录,确保仅统计目标范围内的代码。

修正后的Runsettings配置

<CodeCoverage>
    <!-- 限定仅扫描src目录下的源代码 -->
    <Sources>
        <Include>
            <Source>$(SolutionDir)src\**\*.cs</Source>
        </Include>
        <Exclude>
            <Source>$(SolutionDir)src\**\*Tests*.cs</Source>
            <Source>$(SolutionDir)tests\**\*.cs</Source>
        </Exclude>
    </Sources>

    <!-- 过滤要统计的dll:包含Adaptive且排除测试项目dll -->
    <ModulePaths>
        <Include>
            <ModulePath>.*Adaptive[^Tests]*\.dll$</ModulePath>
        </Include>
        <Exclude>
            <ModulePath>.*Tests.*\.dll$</ModulePath>
            <ModulePath>.*Test.*\.dll$</ModulePath>
        </Exclude>
    </ModulePaths>

    <Attributes>
        <Exclude>
            <Attribute>^System\.Diagnostics\.CodeAnalysis\.ExcludeFromCodeCoverageAttribute$</Attribute>
        </Exclude>
    </Attributes>

    <!-- 可选:排除测试框架相关特性方法 -->
    <Functions>
        <Exclude>
            <Function>^Microsoft\.VisualStudio\.TestTools\.Testing\.TestCleanupAttribute$</Function>
            <Function>^Microsoft\.VisualStudio\.TestTools\.Testing\.TestInitializeAttribute$</Function>
            <Function>^Microsoft\.VisualStudio\.TestTools\.Testing\.TestMethodAttribute$</Function>
        </Exclude>
    </Functions>
</CodeCoverage>

关键修正点说明

  • Sources节点:通过$(SolutionDir)src\**\*.cs锁定src目录下的所有C#代码,同时排除src和tests目录内的测试文件,从源代码层面缩小统计范围。
  • ModulePaths优化:
    • Include规则改为.*Adaptive[^Tests]*\.dll$,确保匹配包含Adaptive但不含Tests的dll,避免误匹配测试项目的输出文件。
    • Exclude补充.*Test.*\.dll$,覆盖更多测试dll的命名场景。
  • Functions节点:可选配置,排除测试框架的特性方法,避免统计测试代码本身。

额外验证步骤

  1. 确认测试项目的csproj文件中已添加<IsTestProject>true</IsTestProject>标记,让覆盖率工具自动识别并排除测试项目。
  2. 运行覆盖率统计时,指定正确的Runsettings文件,示例命令:
dotnet test --settings ./YourSettings.runsettings --collect:"XPlat Code Coverage"
  1. 检查编译输出的dll路径(通常在bin/Debug/netX/目录),确认正则规则能正确匹配到src下Adaptive项目的dll文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:10:38