.NET 10 的主线
微软把 .NET 10 定为 LTS(长期支持)版本,重点在三件事:极致性能、AI 集成、云原生体验。配合 C# 14 的语法改进,写 .NET 代码的舒适度又上了一个台阶。
一、C# 14:让样板代码消失
field 关键字:属性不用再写后备字段
public class Order
{
public decimal Total { get; set; }
// 以前需要 private decimal _discount;
public decimal Discount
{
get => field;
set
{
if (value is < 0 or > 1)
throw new ArgumentOutOfRangeException(nameof(value));
field = value;
}
}
public decimal Payable => Total * (1 - Discount);
}field 关键字让“半自动属性”终于不用手写后备字段了,这是 C# 社区呼声很高的改进。
扩展成员:扩展属性成为可能
public static class StringExtensions
{
// 扩展属性(以往只能写扩展方法)
extension(string s)
{
public bool IsBlank => string.IsNullOrWhiteSpace(s);
public string Slug => s.Trim().ToLowerInvariant().Replace(" ", "-");
}
}
// 使用
if (title.IsBlank) return;
var url = title.Slug;空条件赋值与更简洁的 lambda
// 仅在非空时赋值
customer?.Orders ??= new List<Order>();
// 隐式 span 转换,减少手写 AsSpan
ReadOnlySpan<char> span = "hello";二、性能:把 AOT 当成默认选项之一
# 发布原生 AOT 产物
dotnet publish -c Release -r linux-x64 /p:PublishAot=true
# 对比体积与启动时间
ls -lh bin/Release/net10.0/linux-x64/publish/appAOT 编译后:
- 启动时间从数百毫秒降到个位数毫秒;
- 产物体积可到 10MB 级别(配合
TrimMode=full); - 内存占用显著下降,非常适合 Serverless 与 CLI。
<PropertyGroup>
<PublishAot>true</PublishAot>
<InvariantGlobalization>true</InvariantGlobalization>
<TrimMode>full</TrimMode>
</PropertyGroup>注意:AOT 下反射受限,序列化场景优先用 source generator:
// 编译期生成序列化代码,AOT 友好
[JsonSerializable(typeof(OrderDto))]
[JsonSourceGenerationOptions(PropertyNamingPolicy = JsonKnownNamingPolicy.CamelCase)]
internal partial class AppJsonContext : JsonSerializerContext {}
var json = JsonSerializer.Serialize(order, AppJsonContext.Default.OrderDto);三、Minimal API:十行代码一个服务
using Microsoft.Extensions.AI;
var builder = WebApplication.CreateBuilder(args);
// 内置 OpenTelemetry
builder.Services.AddOpenTelemetry()
.WithMetrics(m => m.AddAspNetCoreInstrumentation())
.WithTracing(t => t.AddAspNetCoreInstrumentation());
// 统一的 AI 抽象:换 OpenAI / Azure / Ollama 只改一行
builder.Services.AddChatClient(
new OllamaChatClient(new Uri("http://localhost:11434"), "qwen2.5"));
var app = builder.Build();
app.MapGet("/health", () => Results.Ok(new { ok = true }));
app.MapPost("/summarize", async (ChatRequest req, IChatClient chat) =>
{
var reply = await chat.GetResponseAsync($"用一句话总结:{req.Text}");
return Results.Ok(new { summary = reply.Text });
});
app.Run();
record ChatRequest(string Text);Microsoft.Extensions.AI 是 .NET 面向 AI 应用的统一抽象层,把“换模型厂商”从重写代码降级成换配置。
四、容器与可观测性
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
WORKDIR /src
COPY . .
RUN dotnet publish -c Release -o /app /p:PublishAot=true
FROM mcr.microsoft.com/dotnet/runtime-deps:10.0-alpine
WORKDIR /app
COPY --from=build /app .
USER $APP_UID
ENTRYPOINT ["./app"]配合 SDK 内置的容器发布支持,甚至不需要写 Dockerfile:
dotnet publish -c Release /p:PublishProfile=DefaultContainer \
/p:ContainerImageTag=1.0.0 /p:ContainerRuntime=docker五、升级清单
- 把
global.json与 CI 镜像切到10.0,先跑一遍现有测试; - 用
dotnet format统一代码风格,顺手启用 C# 14; - 对启动敏感的服务(函数计算、CLI)试点 AOT;
- 用
Microsoft.Extensions.AI收敛散落各处的 SDK 调用。
小结
.NET 10 是一个“把复杂度收进框架”的版本:C# 14 消样板,AOT 管性能,Extensions.AI 统一 AI 接入。对于已经在使用 .NET 8/9 的团队,这是一次低风险、高回报的升级。
评论 0
还没有评论,来说两句吧。