Skip to content
bitzorcas
中EN

Concept

ADR 0102:Native AOT 作为设计约束

Native AOT 是设计约束与 trim 发布硬门禁,而非 v1 全 AOT 强制要求——优先源生成,反射被禁止,除非登记为 AOT 豁免。

Last updated

状态

Accepted(Revised v2,2026-06-29)。

背景

Native AOT 带来快速启动、低内存与小体积,但在 .NET 10 下 SqlSugar、CAP、Quartz、JsonPatch 与 SignalR 是否完全 AOT 安全尚未验证。在 v1 强制全服务 Native AOT 风险很高,可能被迫替换已选定的技术。

决策

把 Native AOT 定位为设计约束与分阶段验证目标,而非 v1 硬发布门禁。设计上:优先源生成、显式 DI 注册、最小反射;禁止启动期全 assembly 扫描与重度运行时反射。核心库启用 IsAotCompatible;API 在无严重警告下达到 PublishTrimmed。

v2 修订把 trim 发布升级为硬门禁:dotnet publish -p:PublishTrimmed=true 是一个 verify-all 步骤。SqlSugar 适配器、Application 与 Domain 必须产生零未登记 IL 警告;新反射代码是 P0 合并阻断。Native AOT 全发布仍是独立的可选 profile,但所有新代码必须 AOT 兼容。运行时反射 API(MakeGenericType、GetMethod、Activator.CreateInstance、Assembly.GetTypes)在框架默认路径中被禁止;必需的反射(如 EF Core 模型构建)必须以 // AOT-EXEMPT: <reason> 注解、附带单元测试并登记到 trim-publish-status 台账。

后果

该设计是务实的——不被未验证的 AOT 假设绑架,无需强制替换 SqlSugar/CAP——同时仍向 AOT 收敛。风险是若警惕放松,反射/动态代码会回流;AOT/Trim 验证清单与 REQ-GATE-001 反射扫描缓解了这一点。

另见

100%

滚轮或按钮缩放 · 放大后拖动画面 · 双击切换 100% / 200%