
.NET 9 是微软一年一版本节奏的第二个版本聚焦云原生应用和性能优化版本定位适用版本.NET 9 | STSStandard Term Support 支持周期18 个月2024.11 - 2026.05 前置知识.NET 8 基础背景从 .NET 8 开始微软采用了一年一版本的发布节奏。.NET 9 是这个节奏的第二个版本它不是 LTS而是 STSStandard Term Support支持周期只有 18 个月。但这并不意味着 .NET 9 不重要。相反它带来了许多面向云原生和性能的改进特别是 AI 构建基块是微软在 AI 时代的重要布局。.NET 9 的定位特性说明发布时间2024 年 11 月支持类型STSStandard Term Support支持周期18 个月至 2026 年 5 月C# 版本C# 13核心主题云原生 性能 AILTS vs STS 再回顾类型.NET 8 (LTS).NET 9 (STS)支持周期3 年18 个月稳定性高中新特性保守激进适用场景生产环境尝鲜/个人项目建议生产环境优先选择 .NET 8LTS如果想用新特性可以尝试 .NET 9.NET 102025.11将是下一个 LTS新特性一览特性简述实用性云原生增强Kubernetes 集成、服务发现、Service Mesh⭐⭐⭐⭐⭐性能大幅提升JIT/GC/Arm64 优化⭐⭐⭐⭐⭐AI 构建基块Microsoft.Extensions.AI 统一抽象⭐⭐⭐⭐⭐CET 影子栈安全硬件级控制流保护⭐⭐⭐⭐BinaryFormatter 移除安全改进移除不安全序列化⭐⭐⭐⭐⭐.NET MAUI 9HybridWebView、TitleBar、Native AOT⭐⭐⭐⭐WPF Fluent 主题现代化 UI 主题⭐⭐⭐WinForms 深色模式原生深色主题支持⭐⭐⭐基线 GC 默认启用后台垃圾回收⭐⭐⭐⭐动态 PGO 改进Profile-Guided Optimization⭐⭐⭐Lock 类型新的线程同步原语⭐⭐⭐⭐LINQ 新方法CountBy、AggregateBy⭐⭐⭐⭐SDK 改进Terminal Logger、工作负载历史⭐⭐⭐破坏性变更需要注意的升级事项⭐⭐⭐⭐⭐.NET 9 的核心改进1. 云原生支持增强// 更好的 Kubernetes 集成 builder.Services.AddKubernetesConfiguration(); // 服务发现改进 builder.Services.AddServiceDiscovery(); builder.Services.AddHttpClientWeatherService( weather, static client client.BaseAddress new(httpshttp://weather));2. 性能大幅提升.NET 9 在性能方面继续发力JIT 编译器更好的内联决策、循环优化GC动态适应应用大小基线 GC 默认启用Arm64 优化针对 ARM 架构的特别优化// System.Text.Json 性能提升约 25% var json JsonSerializer.Serialize(data); // LINQ 新方法CountBy 和 AggregateBy var counts list.CountBy(x x.Category); var aggregates list.AggregateBy(x x.Type, 0, (acc, item) acc item.Value);3. AI 构建基块.NET 9 引入了 AI 构建基块这是最大的亮点// Microsoft.Extensions.AI 统一抽象层 builder.Services.AddChatClient(sp new OpenAIClient(apiKey).GetChatClient(gpt-4)); // 向量存储 builder.Services.AddVectorStore() .AddRedisVectorRecord(redis);核心组件Microsoft.Extensions.AI统一 AI 抽象层Microsoft.Extensions.VectorData向量存储TensorT张量类型4. CET 影子栈安全CETControl-flow Enforcement Technology是 Intel/AMD 处理器支持的硬件安全特性影子栈Shadow Stack防止 ROPReturn-Oriented Programming攻击间接分支追踪Indirect Branch Tracking防止 JOPJump-Oriented Programming攻击.NET 9 默认启用无需额外配置运行时自动利用硬件保护!-- 在 .csproj 中启用 -- PropertyGroup CETCompattrue/CETCompat /PropertyGroup5. BinaryFormatter 完全移除.NET 9 彻底移除了BinaryFormatter这是最重要的安全改进之一// ❌ .NET 9 中已移除 var formatter new BinaryFormatter(); var obj formatter.Deserialize(stream); // ✅ 替代方案使用 System.Text.Json var obj JsonSerializer.DeserializeMyClass(stream); // ✅ 替代方案使用 MessagePack var obj MessagePackSerializer.DeserializeMyClass(buffer); // ✅ 替代方案使用 protobuf-net var obj ProtoBuf.Serializer.DeserializeMyClass(stream);6. .NET MAUI 9MAUI 9 带来多项重要改进// HybridWebView - 在 WebView 中运行 Blazor 组件 HybridWebView Srcwwwroot/index.html / // TitleBar - 自定义标题栏 ContentPage NavigationPage.TitleView Label TextMy App / /NavigationPage.TitleView /ContentPage // Native AOT - 编译为原生代码启动更快7. WPF Fluent 主题!-- 在 App.xaml 中启用 Fluent 主题 -- Application.Resources ResourceDictionary ResourceDictionary.MergedDictionaries ResourceDictionary Sourcepack://application:,,,/PresentationFramework.Fluent;component/Themes/Fluent.xaml / /ResourceDictionary.MergedDictionaries /ResourceDictionary /Application.Resources8. WinForms 深色模式// 启用深色模式 Application.SetColorMode(ColorMode.Dark); // 或在配置文件中设置 // runtimeconfig.json { configProperties: { System.Windows.Forms.ApplicationConfiguration.EnableVisualStylesDarkMode: true } }9. 新的 Lock 类型// .NET 9 引入的专用 Lock 类型 private readonly Lock _lock new(); void DoWork() { lock (_lock) // 自动使用新的 Lock 类型 { // 临界区 } } // 或者显式使用 void DoWorkExplicit() { using var scope _lock.EnterScope(); // 临界区 }10. LINQ 新方法// CountBy - 按键分组计数 var counts list.CountBy(x x.Category); // 结果[(key: A, count: 3), (key: B, count: 2)] // AggregateBy - 按键分组聚合 var totals list.AggregateBy( x x.Type, 0, (acc, item) acc item.Value); // 结果[(key: Type1, total: 100), (key: Type2, total: 200)]11. 基线 GC 默认启用.NET 9 将 Background GC 设为默认模式!-- .csproj 中配置 -- PropertyGroup ServerGarbageCollectiontrue/ServerGarbageCollection ConcurrentGarbageCollectiontrue/ConcurrentGarbageCollection /PropertyGroup12. 动态 PGO 改进动态 Profile-Guided Optimization 在 .NET 9 中得到增强更智能的热点检测更好的内联决策减少运行时开销13. SDK 改进# Terminal Logger 默认启用 - 输出更简洁 dotnet build # 工作负载历史 - 查看已安装的工作负载 dotnet workload history # 新的构建检查 dotnet build --checkC# 13 新特性预览.NET 9 搭载 C# 13带来了 10 个新特性特性简述params 集合params支持SpanT、IEnumerableT等新 Lock 类型System.Threading.Lock替代Monitor\e 转义序列新的转义字符ref struct 接口ref struct 可以实现接口allows ref struct泛型支持 ref structpartial 属性属性和索引器支持 partialoverload 优先级库作者可以指定重载优先级隐式索引器访问在对象初始化中直接访问索引器扩展nameof范围nameof 可以使用更多语法元素partial 类型改进更灵活的 partial 定义破坏性变更升级到 .NET 9 时需要注意以下破坏性变更变更影响迁移建议BinaryFormatter 移除使用二进制序列化的代码会报错迁移到 System.Text.Json 或 MessagePackTLS 1.3 默认启用某些旧服务器可能不支持配置 HttpClient 使用 TLS 1.2GC 行为变化内存回收模式改变监控应用内存使用某些 API 标记为 obsolete编译警告按照警告迁移到新 API// TLS 配置示例 var handler new HttpClientHandler { SslProtocols System.Security.Authentication.SslProtocols.Tls12 | System.Security.Authentication.SslProtocols.Tls13 }; var client new HttpClient(handler);迁移建议从 .NET 8 升级到 .NET 9# 1. 更新 SDK 版本 dotnet --list-sdks # 2. 更新项目文件 TargetFrameworknet9.0/TargetFramework # 3. 更新 NuGet 包 dotnet list package --outdated # 4. 测试 dotnet test升级决策你现在用的版本 → .NET 8 (LTS) ↓ 需要用 AI 构建基块吗 ├── 是 → 升级到 .NET 9 └── 否 → 等待 .NET 10 (2025.11 LTS)注意事项STS 支持周期短18 个月后需要再次升级AI 组件预览部分 AI 组件还在预览Breaking Changes部分 API 有变更BinaryFormatter必须迁移到其他序列化方案实战场景适合升级的场景想尝试 AI 构建基块需要更好的性能个人项目或尝鲜计划迁移到 .NET 10可以暂缓的场景生产环境建议用 .NET 8 LTS依赖的包还不支持 .NET 9项目稳定运行没有性能问题使用 BinaryFormatter 且迁移成本高一句话总结.NET 9 是云原生与性能之年AI 构建基块让你的 .NET 应用拥抱 AI 时代同时 CET 安全和 BinaryFormatter 移除让应用更安全。官方文档Whats new in .NET 9Whats new in C# 13Whats new in ASP.NET Core 9.NET 9 Breaking Changes.NET MAUI 9示例代码.NET 新特性巡礼全系列配套示例代码含 dotnet 8/9/10GitHubGitHub - LadyKiller1025/dotnet-feature-tour-demos: .NET Feature Tour - Code Demos (.NET 8/9/10) · GitHubGiteehttps://gitee.com/qakjhzx/dotnet-feature-tour-demos 欢迎点赞、收藏、转发你的支持是我持续创作的动力