
全面支持.Net Standard 2.0 标准从 .NET Framework 老项目到 .NET 10 新工程统统能接上。引子每个写过 .NET 桌面端的工程师几乎都踩过同一个坑升级。客户机器散落全国系统从 Win7 到 Win11运行时从 .NET Framework 4.6 到 .NET 10。你发布一个新版本就要远程指导用户手动拷贝、解压、替换——祈祷不出岔子。Upgrade.Net是为终结这件事而生的开源组件。它真正值得说道的地方不是“能升级”而是用一套核心库吃下整个 .NET 生态——核心库直接打通netstandard2.0十年前的老工程和刚上 .NET 10 的新项目都可以零成本接进来。一、.NET Standard 2.0一库适配所有 .NET 生态打开Upgrade.Net/Upgrade.Net.csproj第一行就是答案TargetFrameworknetstandard2.0/TargetFramework.NET Standard 2.0是一套 API 契约不是运行时。任何兼容它的运行时都能直接引用编译好的 dll运行时最低版本场景.NET Framework4.6.1WinForm/WPF 老项目.NET Core / .NET 5~10全部现代跨平台桌面/服务Mono / Xamarin / Unity5.4第三方运行时 游戏引擎翻译成业务语言客户机器装的是什么版本不重要只要 ≥ .NET Framework 4.6.1你的升级器就能跑。对 toB 软件厂商来说这是比任何花哨特性都重要的能力。二、目标框架支持矩阵七大框架同时编译只有核心库兼容不够。Upgrade.Net 把控制台版Upgrade.Cmd和 WPF 版Upgrade.Wpf都做了多目标编译——同一个项目同时产出 7 个框架的可执行文件!-- Upgrade.Cmd.csproj --TargetFrameworksnet472;net48;net6.0;net7.0;net8.0;net9.0;net10.0/TargetFrameworks!-- Upgrade.Wpf.csproj --TargetFrameworksnet472-windows;net48-windows;net6.0-windows;net7.0-windows;net8.0-windows;net9.0-windows;net10.0-windows/TargetFrameworks合并后覆盖矩阵框架CmdWpf典型场景.NET Framework 4.7.2✅✅政企老服务器、Win7/8.1.NET Framework 4.8✅✅Win10/11 默认运行时.NET 6.0 / 8.0 (LTS)✅✅跨平台桌面、长期支持.NET 7.0 / 9.0 / 10.0✅✅最新 STS / 跟进最新全部框架0 警告 0 错误通过编译验证见DOCS/兼容性分析.md。一句话从 Win7 工控机到 .NET 10 新工程全程在线。三、界面一览在聊代码前先眼见为实。Upgrade.Net 提供控制台和 WPF 两套界面共享同一套核心逻辑通过UpgradeView接口驱动。WPF 桌面版适合面向终端用户的客户端应用标题、版本号、步骤清单、进度条一应俱全。开始界面— 标题、版本对比、当前步骤清单一目了然升级进行中— 当前步骤高亮已完成步骤打勾支持等待倒计时进度详情— 步骤面板下方追加进度条按钮变为升级中…升级完成— 所有步骤全部成功提示用户退出控制台版适合服务器、CI/CD、无人值守等无 GUI 场景纯文本风格。开始界面— ASCII 风格显示版本信息和步骤清单升级进行中— 终端日志按步骤滚动输出含倒计时和重试提示升级完成— 全部通过给出所有升级步骤执行完成的总结四、16 种原子操作覆盖升级全集Upgrade.Net 把升级中用到的所有文件/进程操作拆成了 16 种功能性子操作每种都是独立的StepConfig分类操作网络Download下载、Upload上传进程Command同步执行命令行、Launch异步启动程序压缩Zip压缩、Unzip解压目录MoveDir、CopyDir、CreateDir、DeleteDir、RenameDir文件MoveDoc、CopyDoc、CreateDoc、DeleteDoc、RenameDoc每个步骤还支持waitTime执行后等待 倒计时显示“应用将在 5 秒后重启”retryCountretryDelay失败自动重试应对网络抖动continueOnError非关键步骤失败不阻断流程像搭积木一样编排升级流程不需要改一行 C# 代码。五、升级流程代码示例5.1 一份 JSON 搞定完整升级下面是覆盖“下载 → 备份 → 解压 → 清理 → 启动”的完整配置{title:MyApp 升级程序,oldVersion:1.0.0,newVersion:2.0.0,autoStart:true,autoClose:true,verInfo:本次更新\n- 修复已知 Bug\n- 新增报表模块,steps:[{title:下载更新包,option:Download,url:https://cdn.example.com/releases/v2.0.0.zip,file:update.zip,retryCount:3,retryDelay:2000},{title:备份当前版本,option:CopyDir,source:./app,destination:./backup/1.0.0},{title:解压覆盖,option:Unzip,source:update.zip,destination:./app,overwrite:true},{title:清理安装包,option:DeleteDoc,path:update.zip},{title:启动新版本,option:Launch,command:dotnet,args:MyApp.dll,path:./app,waitTime:3}]}5.2 在 WPF 主程序中触发升级核心库netstandard2.0.NET Framework 4.7.2 到 .NET 10 的引用方式完全一致usingCom.Scm.Upgrade;usingCom.Scm.Upgrade.Config;publicpartialclassMainWindow:Window,UpgradeView{privateasyncvoidCheckUpdate_Click(objectsender,RoutedEventArgse){// 加载 JSON 配置varconfigUpgradeConfig.Load();// 也可以用代码动态构造从服务器拉版本信息时更灵活// config new UpgradeConfig { ... };// config.Steps new ListStepConfig {// StepConfig.NewDownloadStep(下载, https://..., update.zip),// StepConfig.NewUnzipStep(解压, update.zip, ./, overwrite: true),// StepConfig.NewLaunchStep(启动, MyApp.exe, ./)// };varupgradenewUpgrade(this);// Window 实现 UpgradeViewawaitupgrade.StartAsync(config);// 异步执行UI 实时同步进度Application.Current.Shutdown();// 升级结束退出}}UpgradeView接口提供Log/LogStep/LogStepStatus/LogStepProgress等方法你在 WPF 里绑定到 TextBox、ProgressBar 即可控制台版换成Console.WriteLine即可。5.3 跨框架集成速查场景方式备注NuGet 引用dotnet add package Com.Scm.Upgrade推荐。需额外引入Newtonsoft.Json≥13.0源码引用ProjectReference Include..\Upgrade.Net\Upgrade.Net.csproj /适合需要魔改流程.NET Framework 老项目同上Process.Start(Upgrade.Cmd.exe)默认不带 Newtonsoft.Json手动加六、总结Upgrade.Net 不是又一个“造轮子”的玩具而是认真考虑过真实落地场景的工程方案一个netstandard2.0类库覆盖 .NET Framework 4.7.2 ~ .NET 10 全谱系一份 JSON 配置编排从下载到启动的全套流程两套 UI控制台 WPF适配服务器到终端用户的全场景。对于需要向客户分发桌面客户端的 .NET 团队不用为每个运行时维护一套升级器新功能只需改 JSON不动代码重试、等待、错误处理内置WPF 版带暂停/继续/取消比手写进度条靠谱得多项目地址NuGetCom.Scm.Upgrade源码仓库https://github.com/leadiot/Upgrade.Net当前版本1.2.42026-07-27如果觉得有用欢迎给项目点个 Star ⭐。