You need to enable JavaScript to run this app. Azure DevOps CI任务无法同时运行.NET Framework与.NET Core单元测试
优惠活动
大模型
产品
解决方案
定价
更多

Azure DevOps CI任务无法同时运行.NET Framework与.NET Core单元测试

混合框架解决方案Azure DevOps流水线全量代码覆盖率采集方案

现存场景与问题

  • 解决方案包含多类不同目标框架的项目:
    • 面向.NET Standard的library.csproj核心类库项目
    • 面向.NET Framework的library.UnitTests.csproj单元测试项目
    • 面向.NET Core 2.2的WebApi.csproj服务项目
    • 面向.NET Core 2.2、AnyCPU平台构建的WebApi.UnitTests.csproj单元测试项目
  • 流水线基于Azure DevOps搭建,核心目标为采集全量单元测试的代码覆盖率,同步至SonarQube平台完成质量分析
  • 原生配置报错:测试执行环节默认采用面向.NET Framework 4.0、X64平台的配置运行测试,无法识别匹配.NET Core 2.2 AnyCPU格式的WebApi.UnitTests.dll,触发框架不匹配报错
  • 已尝试的临时调整:将两类测试拆分为两个独立测试任务执行,拆分后测试流程可正常运行,但单环节生成的代码覆盖率数据无法跨任务留存,无法支撑SonarQube的全量分析要求

可实现全量覆盖率采集的落地方案

方案1:单测试任务适配混合框架并行执行

  • 调整Visual Studio Test任务的Test assemblies参数,手动配置两类测试dll的匹配路径,替换默认的全量扫描规则,避免无关dll被错误加载
  • 在任务的执行配置栏,取消勾选仅使用默认测试宿主运行选项,让任务可自动识别测试dll对应的运行时:面向.NET Framework的测试dll自动绑定VSTest运行器执行,面向.NET Core的测试dll自动绑定dotnet test运行时执行
  • 开启任务内置的代码覆盖率采集开关,该模式会自动对两类测试的执行流程完成插桩,生成统一格式的覆盖率输出文件,直接对接后续SonarQube分析流程

方案2:拆分测试任务时的覆盖率合并适配

  • 若单任务适配存在版本兼容问题,可保留两个独立的测试执行任务,每个任务单独开启代码覆盖率采集,分别生成独立的.coverage格式输出文件
  • 在两个测试任务全部执行完成后,新增一个命令行任务,调用内置的codecoverage.exe工具将两个独立生成的覆盖率文件合并为单个标准格式文件
  • SonarQube分析环节配置为读取合并后的覆盖率文件作为输入,即可完成全量覆盖率的上传分析

关键注意事项

  • 针对.NET Core 2.2版本的测试项目,需提前在流水线代理上预置对应版本的.NET Core SDK,避免运行时缺失导致测试执行失败
  • SonarQube的前置分析初始化环节需配置在所有测试执行、覆盖率合并步骤完成之后再启动,不可前置触发,否则会出现覆盖率文件缺失的分析异常

内容的提问来源于stack exchange,提问作者Wael Mkaddem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.07 02:36:03