.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 默认启用:无需额外配置,运行时自动利用硬件保护
true
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 --check
C# 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 移除让应用更安全。
官方文档
📦 示例代码:.NET 新特性巡礼全系列配套示例代码(含 dotnet 8/9/10)
💬 欢迎点赞、收藏、转发,你的支持是我持续创作的动力!