
目录结论默认选 .NET 101. 官方支持2. 客户电脑不一定“天然都支持”2.1 框架依赖发布2.2 自包含发布3. 各自特色4. WPF 程序升级时会碰到的变化5. 场景与选型结论默认选 .NET 10截至 2026 年 10 月 2 日凡是还要长期交付、还要接安全补丁的 WPF 程序.NET 10 是当前应采用的长期版本。.NET 8 的支持在2026 年 11 月 10 日结束。两者都是 WPF 可用的 Windows 桌面运行时画界面的技术栈相同。差异在支持期限、补丁、两年间积累的运行时和 WPF 修复以及程序和依赖迁移的工作量。1. 官方支持.NET 8.NET 10发布2023-11-14LTS2025-11-11LTS当前阶段维护期只修安全问题主动支持期功能和安全都还在更新最新补丁8.0.312026-09-0810.0.122026-09-08支持结束2026-11-102028-11-14WPF 目标框架net8.0-windowsnet10.0-windows11 月 10 日之后针对 .NET 8 的程序仍能启动但不会再有安全更新也不会再有技术支持。.NET 9 不用单独考虑。它和 .NET 8 同一天结束支持不是长期选择。2. 电脑支持Windows 不会像预装 .NET Framework 4.8 那样预装 .NET 8 或 .NET 10。客户机器上有没有对应运行时取决于发布方式。2.1 框架依赖发布程序较小但目标电脑必须已经安装同一主版本的 .NET Desktop Runtime。WPF 需要的是 Desktop Runtime而不只是基础运行时。针对 8 生成的程序不会自动改用机器上的 10针对 10 生成的程序也不会用 8 启动。8 和 10 可以同时安装互不替代。2.2 自包含发布把对应版本的运行时打进程序客户不必预先安装 .NET。代价是安装包明显变大运行时的安全补丁要靠重新发布程序。WPF 还带有几份本机图形库要真正打成一个 exe需要把它们一并打进去。无论 8 还是 10自包含仍然依赖 Windows 本身和 Visual C 运行库除非一起打包。“电脑是否支持”操作系统是否还在你愿意承担的范围内。发布方式是否已经带上了正确的 Desktop Runtime。操作系统范围官方当前支持矩阵里.NET 8 和 .NET 10 的 Windows 范围是同一类Windows 11 的在服版本以及 Windows 10 的 Enterprise、LTSC、IoT 若干版本如 21H2 Enterprise/IoT、1809 Enterprise、1607 Enterprise。Windows 10 家庭版和专业版 22H2 的系统支持已在 2025 年 10 月 14 日结束官方矩阵不再把它列为受支持系统。这不表示程序一定打不开只表示微软不再为这个组合做测试和修复。现场工控机如果还是 Windows 10应以那台机器的实际镜像试跑不能用开发机上的 Windows 11 代替。Windows 7、Windows 8.1.NET 8 和 .NET 10 都不支持。3. 各自特色.NET 10 有、.NET 8 没有的支持到 2028 年 11 月中间持续有安全和功能修复。.NET 9 和 .NET 10 累计的运行时改进JIT、内存分配、启动和部分库的性能。这些是运行时层面的改进不是“WPF 画图会自动快一倍”。WPF 自身在 .NET 10 的改动减少 UI 自动化、文件对话框、像素格式转换中的分配字体加载改为托管实现动态资源、输入法、XAML 解析和字体渲染路径有优化Fluent 样式有后续修复剪贴板与 WinForms 共用一套 API并支持用 JSON 传递自定义数据。语言和库更新到 C# 14 及这两年的 BCL。客户看不见开发效率会有差别。.NET 8 有、 .NET 10 没有的现有工程、NuGet、CI 和已发出去的安装包如果已经锁在net8.0-windows它是一条已知能编译、能运行的基线。迁移成本为零。继续用 8不用处理 .NET 9 起移除的BinaryFormatter也不用处理 .NET 10 对剪贴板旧 API 的废弃。4. WPF 程序升级时会碰到的变化普通按钮、布局、绑定、WriteableBitmap多数项目改一下TargetFramework就能编过。需要重新验证的是下面这些。剪贴板、拖放、导航日记里的自定义类型。.NET 9 起BinaryFormatter不再可用。字符串、数值、日期等基础类型仍能用自定义对象要改成 JSON 或字节数组。.NET 10 把旧的GetData标为过时并提供TryGetData、SetDataAsJson。空的ColumnDefinition/RowDefinition以及错误的DynamicResource用法。在 .NET 10 里会从“以前能混过去”变成编译失败或运行崩溃。同时引用 WPF 和 WinForms。MenuItem、ContextMenu需要写清楚命名空间。第三方控件、授权组件、硬件 SDK。若厂商只声明支持到net8.0-windows以厂商说明为准依赖老旧第三方库比较多时要甚至使用.net 10可能支持会受到限制。多数 WPF 控件能多目标框架但不能假设每一家都已跟上。这些是兼容性成本不是性能高低。5. 场景与选型选择适用场景.NET 10新程序还要维护一年以上的程序需要 2026 年 11 月之后的安全更新依赖已支持net10.0可以升级 SDK 和编译环境。对当前时间点这是默认选择。发布时用自包含或在安装包里附带 .NET Desktop Runtime 10这样不依赖客户是否已安装。短期留在 .NET 8已经发出去、且在 11 月 10 日前不再改目标框架的补丁或某个关键组件明确还不能在 10 上加载而又必须在短期内交货。这种停留要写成有截止日期的决定11 月 10 日之后继续用 8等于接受不再有安全补丁。不要用“电脑新旧”来二选一。旧电脑缺的是运行时安装和操作系统本身不是“.NET 8 比 .NET 10 更能在老 Windows 上跑”。两边都不能靠系统预装保证自包含发布对两边同样适用。