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

.NET解决方案:DevOps流水线中代码覆盖率无法排除程序集

Azure DevOps流水线代码覆盖率排除模块不生效问题解决

环境配置

集成测试项目.csproj配置

<PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <AzureFunctionsVersion>v4</AzureFunctionsVersion>
    <RunSettingsFilePath>$(MSBuildProjectDirectory)\project.runsettings</RunSettingsFilePath>
</PropertyGroup>

同目录project.runsettings配置

<?xml version="1.0" encoding="utf-8" ?>
<RunSettings>
    <DataCollectionRunSettings>
        <DataCollectors>
            <DataCollector friendlyName="XPlat code coverage">
                <Configuration>
                    <CodeCoverage>
                        <ModulePaths>
                            <Exclude>
                                <ModulePath>microsoft.azure.webjobs.*</ModulePath>
                            </Exclude>
                        </ModulePaths>
                        <UseVerifiableInstrumentation>True</UseVerifiableInstrumentation>
                        <AllowLowIntegrityProcesses>True</AllowLowIntegrityProcesses>
                        <CollectFromChildProcesses>True</CollectFromChildProcesses>
                        <CollectAspDotNet>False</CollectAspDotNet>
                    </CodeCoverage>
                </Configuration>
            </DataCollector>
        </DataCollectors>
    </DataCollectionRunSettings>
</RunSettings>

问题

本地运行测试时,microsoft.azure.webjobs.*模块能正常从覆盖率报告中排除,但在Azure DevOps流水线中运行时,这些模块仍被包含,导致整体代码覆盖率被拉低。

解决方法

  • 显式指定runsettings文件:在DevOps的DotNet Test或Visual Studio Test任务中,必须手动指定runsettings路径,不能仅依赖项目配置。

    • DotNet Test任务添加参数:--settings $(Build.SourcesDirectory)/[测试项目相对路径]/project.runsettings
    • Visual Studio Test任务在Run settings file字段填写路径:$(Build.SourcesDirectory)/[测试项目相对路径]/project.runsettings
  • 检查大小写匹配:流水线环境可能区分大小写,调整排除规则的大小写确保匹配,比如改为全小写或全大写:

    <ModulePath>microsoft.azure.webjobs.*</ModulePath>
    <!-- 或 -->
    <ModulePath>MICROSOFT.AZURE.WEBJOBS.*</ModulePath>
    
  • 扩展排除规则:部分场景下模块名可能带版本号或后缀,扩展规则覆盖更多变体:

    <Exclude>
        <ModulePath>microsoft.azure.webjobs.*</ModulePath>
        <ModulePath>Microsoft.Azure.WebJobs.*</ModulePath>
        <ModulePath>*webjobs*</ModulePath>
    </Exclude>
    
  • 确认覆盖率工具类型:确保流水线任务启用的是XPlat Code Coverage,而非其他覆盖率工具,避免配置冲突。在任务的Code coverage选项中选择XPlat Code Coverage。

  • 验证文件读取状态:在流水线中添加日志步骤,输出runsettings文件内容,确认文件已正确同步到构建代理:

    cat $(Build.SourcesDirectory)/[测试项目相对路径]/project.runsettings
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 08:12:57