用途:介绍 .NET 8.0+ 的 AOT 优先应用设计模式,适用于控制台、ASP.NET Core Minimal API、worker service 等可 AOT 项目类型。
主要能力:
- 以源生成器替代反射,例如用 [JsonSerializable] 上下文、[GeneratedRegex]、[LoggerMessage]、[LibraryImport]、[Mapper] 替换 JsonSerializer 反射、Regex 编译、字符串插值日志、DllImport 与 AutoMapper。
- AOT 安全 DI:使用显式 Add*() 注册、扩展方法分组注册、.NET 8+ keyed services;避免程序集扫描与开放泛型解析。
- 序列化选型:System.Text.Json 源生成、Google.Protobuf、MessagePack+源生成器为 AOT 安全;Newtonsoft.Json 与未配源生成的 STJ 不安全。
- 用工厂模式、DI keyed services 或 switch 表达式替代 Activator.CreateInstance。
- 库兼容性评估清单:检查 IsAotCompatible、[RequiresDynamicCode]/[RequiresUnreferencedCode] 标注,并以命令检测:dotnet build /p:EnableAotAnalyzer=true /p:EnableTrimAnalyzer=true /p:TrimmerSingleWarn=false;IL3050 表示必然破坏,IL2026 表示可能破坏。文中给出 AutoMapper、MediatR、FluentValidation、Dapper、EF Core、Refit、Polly、Serilog、Hangfire 的兼容状态与替代方案。
限制:不涉及 Native AOT 发布管线与 MSBuild 配置、trim 标注与库编写、WASM AOT、MAUI AOT、Roslyn 源生成器编写与 DI 容器内部机制。不假设库可 AOT 兼容,需实测;避免 Type.GetType()/Assembly.GetTypes() 运行时发现。