.NET 9 是微软一年一版本节奏的第二个版本,聚焦云原生应用和性能优化
版本定位
适用版本:.NET 9 | STS(Standard Term Support) 支持周期:18 个月(2024.11 - 2026.05) 前置知识:.NET 8 基础
背景
从 .NET 8 开始,微软采用了"一年一版本"的发布节奏。.NET 9 是这个节奏的第二个版本,它不是 LTS,而是 STS(Standard Term Support),支持周期只有 18 个月。
但这并不意味着 .NET 9 不重要。相反,它带来了许多面向云原生和性能的改进,特别是 AI 构建基块,是微软在 AI 时代的重要布局。
.NET 9 的定位
| 特性 | 说明 |
|---|---|
| 发布时间 | 2024 年 11 月 |
| 支持类型 | STS(Standard Term Support) |
| 支持周期 | 18 个月(至 2026 年 5 月) |
| C# 版本 | C# 13 |
| 核心主题 | 云原生 + 性能 + AI |
LTS vs STS 再回顾
| 类型 | .NET 8 (LTS) | .NET 9 (STS) |
|---|---|---|
| 支持周期 | 3 年 | 18 个月 |
| 稳定性 | 高 | 中 |
| 新特性 | 保守 | 激进 |
| 适用场景 | 生产环境 | 尝鲜/个人项目 |
建议:
生产环境优先选择 .NET 8(LTS)
如果想用新特性,可以尝试 .NET 9
.NET 10(2025.11)将是下一个 LTS
新特性一览
| 特性 | 简述 | 实用性 |
|---|---|---|
| 云原生增强 | Kubernetes 集成、服务发现、Service Mesh | ⭐⭐⭐⭐⭐ |
| 性能大幅提升 | JIT/GC/Arm64 优化 | ⭐⭐⭐⭐⭐ |
| AI 构建基块 | Microsoft.Extensions.AI 统一抽象 | ⭐⭐⭐⭐⭐ |
| CET 影子栈安全 | 硬件级控制流保护 | ⭐⭐⭐⭐ |
| BinaryFormatter 移除 | 安全改进,移除不安全序列化 | ⭐⭐⭐⭐⭐ |
| .NET MAUI 9 | HybridWebView、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.AddHttpClient<WeatherService>( "weather", static client => client.BaseAddress = new("https+http://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() .AddRedis<VectorRecord>("redis");核心组件:
Microsoft.Extensions.AI:统一 AI 抽象层Microsoft.Extensions.VectorData:向量存储Tensor<T>:张量类型
4. CET 影子栈安全
CET(Control-flow Enforcement Technology)是 Intel/AMD 处理器支持的硬件安全特性:
影子栈(Shadow Stack):防止 ROP(Return-Oriented Programming)攻击
间接分支追踪(Indirect Branch Tracking):防止 JOP(Jump-Oriented Programming)攻击
.NET 9 默认启用:无需额外配置,运行时自动利用硬件保护
<!-- 在 .csproj 中启用 --> <PropertyGroup> <CETCompat>true</CETCompat> </PropertyGroup>5. BinaryFormatter 完全移除
.NET 9 彻底移除了BinaryFormatter,这是最重要的安全改进之一:
// ❌ .NET 9 中已移除 var formatter = new BinaryFormatter(); var obj = formatter.Deserialize(stream); // ✅ 替代方案:使用 System.Text.Json var obj = JsonSerializer.Deserialize<MyClass>(stream); // ✅ 替代方案:使用 MessagePack var obj = MessagePackSerializer.Deserialize<MyClass>(buffer); // ✅ 替代方案:使用 protobuf-net var obj = ProtoBuf.Serializer.Deserialize<MyClass>(stream);6. .NET MAUI 9
MAUI 9 带来多项重要改进:
// HybridWebView - 在 WebView 中运行 Blazor 组件 <HybridWebView Src="wwwroot/index.html" /> // TitleBar - 自定义标题栏 <ContentPage> <NavigationPage.TitleView> <Label Text="My App" /> </NavigationPage.TitleView> </ContentPage> // Native AOT - 编译为原生代码,启动更快7. WPF Fluent 主题
<!-- 在 App.xaml 中启用 Fluent 主题 --> <Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="pack://application:,,,/PresentationFramework.Fluent;component/Themes/Fluent.xaml" /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources>8. 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> <ServerGarbageCollection>true</ServerGarbageCollection> <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection> </PropertyGroup>12. 动态 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支持Span<T>、IEnumerable<T>等 |
| 新 Lock 类型 | System.Threading.Lock替代Monitor |
| \e 转义序列 | 新的转义字符 |
| ref struct 接口 | ref struct 可以实现接口 |
| allows ref struct | 泛型支持 ref struct |
| partial 属性 | 属性和索引器支持 partial |
| overload 优先级 | 库作者可以指定重载优先级 |
| 隐式索引器访问 | 在对象初始化中直接访问索引器 |
扩展nameof范围 | nameof 可以使用更多语法元素 |
| partial 类型改进 | 更灵活的 partial 定义 |
破坏性变更
升级到 .NET 9 时需要注意以下破坏性变更:
| 变更 | 影响 | 迁移建议 |
|---|---|---|
| BinaryFormatter 移除 | 使用二进制序列化的代码会报错 | 迁移到 System.Text.Json 或 MessagePack |
| TLS 1.3 默认启用 | 某些旧服务器可能不支持 | 配置 HttpClient 使用 TLS 1.2 |
| GC 行为变化 | 内存回收模式改变 | 监控应用内存使用 |
| 某些 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. 更新项目文件 <TargetFramework>net9.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 移除让应用更安全。
官方文档
What's new in .NET 9
What's new in C# 13
What's new in ASP.NET Core 9
.NET 9 Breaking Changes
.NET MAUI 9
📦示例代码:.NET 新特性巡礼全系列配套示例代码(含 dotnet 8/9/10)
GitHub:GitHub - LadyKiller1025/dotnet-feature-tour-demos: .NET Feature Tour - Code Demos (.NET 8/9/10) · GitHub
Gitee:https://gitee.com/qakjhzx/dotnet-feature-tour-demos
💬 欢迎点赞、收藏、转发,你的支持是我持续创作的动力!