news 2026/9/15 17:37:49

dotnet/skills一键升级MSTest:v1/v2到v3迁移完全指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
dotnet/skills一键升级MSTest:v1/v2到v3迁移完全指南

dotnet/skills一键升级MSTest:v1/v2到v3迁移完全指南

【免费下载链接】skillsRepository for skills to assist AI coding agents with .NET and C#项目地址: https://gitcode.com/GitHub_Trending/skills17/skills

还在手动排查 MSTest 升级后的编译错误吗?开源项目dotnet/skills是 .NET 团队为 AI 编码助手(Coding Agent)整理的官方技能库,其中dotnet-test-migration插件可以一键引导完成 MSTest v1/v2 到 v3 的测试框架迁移——自动识别版本、处理破坏性变更、替换.testsettings配置文件,最后跑通全部测试。本文面向新手,带你完整走一遍升级路线 🚀

插件是什么:dotnet-test-migration 概览

该插件位于 plugins/dotnet-test-migration/,包含 5 个迁移技能和 1 个编排 Agent:

组件作用
migrate-mstest-v1v2-to-v3本文主角:MSTest v1/v2 升级到 v3
migrate-mstest-v3-to-v4后续升级到 v4
migrate-xunit-to-mstestxUnit 项目转换为 MSTest
migrate-vstest-to-mtp测试运行器迁移到 MTP
test-migration Agent自动检测框架/版本并路由到正确技能

详细说明见 plugins/dotnet-test-migration/README.md。

快速安装:一键添加 dotnet/skills 插件

在 Copilot CLI 或 Claude Code 中执行:

/plugin marketplace add dotnet/skills /plugin install dotnet-test-migration@dotnet-agent-skills

也可以克隆仓库到本地参考:

git clone https://gitcode.com/GitHub_Trending/skills17/skills

安装后重启,用/skills查看可用技能列表 ✅

先做判断:如何识别你的项目是 MSTest v1 还是 v2?

升级前第一步永远是确认当前版本。AI 助手会自动读取项目文件完成检测,你也可以自查:

判断依据版本迁移路径
项目引用Microsoft.VisualStudio.QualityTools.UnitTestFramework.dllMSTest v1(程序集引用)先删引用,再加 v3 包
MSTest.TestFramework/MSTest.TestAdapter1.x–2.xNuGet 包MSTest v2直接改包版本到 3.x

⚠️ 两条路径在"添加 v3 包"这一步汇合,之后的破坏性变更处理完全相同。检测规则详见 agents/test-migration.agent.md 中的路由表。

必知的 5 大破坏性变更:升级 v3 前必读

MSTest v3与 v1/v2 不二进制兼容,以下是最容易踩坑的变更(摘自 SKILL.md 的破坏性变更清单):

  1. Assert.AreEqual(object, object)重载被移除只剩泛型版本AreEqual<T>(T?, T?)。当两个参数无法推断出公共类型时会报CS0411/CS1503。修复方式:只给编译报错的调用显式加类型参数,例如Assert.AreEqual<object>(expected, actual)不要把整个文件都改成<object>——那会丢掉 v3 新增的类型检查。

  2. DataRow 严格类型匹配这是最隐蔽的坑:项目照样能编译(只有MSTEST0014警告),但运行时抛"Test data doesn't match method parameters"。把字面量改成与参数完全一致的类型即可:int参数传1而不是1Lfloat参数传1.0f而不是1.0。记住:必须跑测试验证,绿色编译说明不了问题

  3. .testsettings配置文件不再受支持删除旧文件、新建等价的.runsettings,且所有 MSTest 配置统一放在一个<MSTest>元素下。注意TestTimeout(每测试超时)不要误写成TestSessionTimeout(全会话超时)。

  4. 移除了部分目标框架.NET 5 需升到 net8.0(LTS)或 net6.0+;.NET Framework 低于 4.6.2 升到 net462;netstandard1.0 升到 netstandard2.0。net6.0/net8.0/net9.0 均受支持,不要改动已经支持的 TFM

  5. 行为类变更(不报编译错误)测试 ID 生成规则改变(CI 按 ID 过滤/播放列表会重置)、TargetInvocationException被解包、部署目录行为统一等——升级后要关注测试数量对比与 CI 历史。

推荐升级路径:选对包模型,一次到位

  • 默认方案——MSTest 元包:移除零散的MSTest.TestFramework/MSTest.TestAdapter,统一引用MSTest元包(如 3.8.0)。若项目仍用 VSTest,保留Microsoft.NET.Test.Sdk并升到兼容版本,否则会报NU1605
  • 进阶方案——MSTest.Sdk:把项目 SDK 改为MSTest.Sdk/3.8.0,框架、适配器、分析器自动配齐。⚠️ 它默认使用 Microsoft.Testing.Platform(MTP);如果你必须留在 VSTest,要显式设置<UseVSTest>true</UseVSTest>不要因为升级框架就顺手切换测试运行器
  • 中央包管理项目请改Directory.Packages.props,而不是在.csproj里内联版本号。

完整 7 步工作流(评估→删 v1 引用→换包→改 TFM→修断言→换 runsettings→验证)都在 skills/migrate-mstest-v1v2-to-v3/SKILL.md 里写好了。

让 AI 替你执行:一句话触发完整迁移

这是本插件最爽的地方——把测试项目放进工作目录,直接对 AI 助手说:

"把这个 MSTest v2 项目升级到 v3,改完编译并跑测试验证。"

test-migrationAgent 会自动完成:检测框架与版本 → 路由到迁移技能 → 修改文件 → 构建运行 → 对比迁移前后的通过/失败数量。它内置了严格的边界闸门:如果项目已经是干净的 v3,它会直接告诉你"迁移已完成"而不乱改代码。

上图是仓库内置评测基础设施对测试类技能的评估报告示例:每个技能只有通过可信的基线对比才能判定为"改进有效",保证迁移技能的可靠性。

迁移技能的行为由 tests/dotnet-test-migration/migrate-mstest-v1v2-to-v3/eval.yaml 中的 10 个真实场景验收,覆盖 v1 程序集引用、CS0411 修复、DataRow 类型不匹配、.testsettings迁移、被移除的 TFM 处理,以及"项目已是 v3 时停止操作"等边界情况。

迁移完成验收清单

  • MSTest v3 包(或 MSTest.Sdk)引用正确,v1/v2 引用与 QualityTools 已清除
  • 项目零错误编译
  • dotnet test全部通过,且通过/失败数量与迁移前基线一致
  • 无遗留.testsettings<LegacySettings>
  • 测试运行器(VSTest/MTP)保持升级前不变

下一步:从 v3 继续走向 v4

迁移到 v3 只是第一站。继续升级到 MSTest v4(处理Custom TestMethodAttributeDisplayNameTestTimeout等变更)请使用 skills/migrate-mstest-v3-to-v4/SKILL.md,Agent 也能编排"v1 → v3 → v4"的多步升级 🎯

总结:用 dotnet/skills 的dotnet-test-migration插件,MSTest 升级不再是"背发布说明"的苦差事——AI 帮你检测版本、修好断言、换掉配置文件、跑绿测试,你只需要验收结果。

【免费下载链接】skillsRepository for skills to assist AI coding agents with .NET and C#项目地址: https://gitcode.com/GitHub_Trending/skills17/skills

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/15 17:37:42

Qt散点图实现:基于QGraphicsView的高性能交互可视化方案

简介&#xff1a;这是一份面向Qt开发者的散点图实现源码示例。它聚焦于QGraphicsView图形视图框架&#xff0c;适合需要掌握自定义二维数据可视化、或想用C在Qt中绘制动态散点图的中初级开发者。压缩包体积仅6KB&#xff0c;共含5个文件&#xff0c;其中包含2个cpp源文件、1个头…

作者头像 李华
网站建设 2026/9/15 17:37:25

Unity卡通渲染利器UTS:从光照原理到参数实战全解析

做二次元角色渲染的人&#xff0c;多少都会绕不开一个名字&#xff1a;Unity-Chan Toon Shader&#xff0c;简称UTS。我最早接触它&#xff0c;是因为想复刻Unity酱那套经典的日式卡通脸部光照&#xff0c;结果发现网上教程要么只讲怎么拖参数、要么直接甩一份Shader源码让人自…

作者头像 李华
网站建设 2026/9/15 17:37:06

Pocket TTS接入Home Assistant语音助手:Wyoming协议实战指南

Pocket TTS接入Home Assistant语音助手&#xff1a;Wyoming协议实战指南 【免费下载链接】pocket-tts A TTS that fits in your CPU (and pocket) 项目地址: https://gitcode.com/GitHub_Trending/po/pocket-tts 想给 Home Assistant 配一个完全本地、低延迟的语音合成引…

作者头像 李华
网站建设 2026/9/15 17:36:55

洛阳东翔科技做的网站新手入门防黑指南

洛阳东翔科技做的网站新手入门防黑指南 网站被黑挂马,后台突然多出陌生管理员,首页跳转博彩广告,这是很多独立站长深夜最崩溃的瞬间。尤其是对于刚接触建站的新手入门阶段,面对满屏的报错日志和诡异的代码注入,往往手足无措,甚至不敢直接重装系统怕丢失数据。这种焦虑感不仅折磨人,更直接导致用户信任度断崖式下跌。…

作者头像 李华
网站建设 2026/9/15 17:35:57

用Codex辅助开发CSV合并脚本:需求拆解、实现与验收

上周接到一个挺无聊但又不能出错的需求&#xff1a;把三份 CSV 合并成一份。说无聊&#xff0c;是因为这本质上就是数据搬运工干的活&#xff0c;把 A 表、B 表、C 表倒腾成一张总表&#xff1b;说不能出错&#xff0c;是因为其中一份是用户基础信息&#xff0c;一份是近三个月…

作者头像 李华