AOT项目开发注意事项
AOT项目有特殊模版的,目前支持AOT的模版有Mini API和gRPC。对于Mini API的AOT项目,有几个不同点,下面是我简化后针对开发的不同点:
- 使用 CreateSlimBuilder() API 确保默认情况下仅启用基本功能,从而最大程度地减小应用的部署大小。
- 配置为仅侦听 HTTP,因为 HTTPS 流量通常由云原生部署中的入口服务处理。
- 将
PublishAot
添加到项目文件,<PublishAot>true</PublishAot>。 - 启用 JSON 序列化程序源生成器。源生成器用于在生成时生成序列化代码,这是本机 AOT 编译所必需的。
- 不能动态反射,不支持动态加载文件,不支持动态编译
.NET的很多三方库,包括官方的Json序列化器,都有使用反射,所以在开发时要特别注意,这些不支持的库,要避免使用。
举几个简单例子,普通反射是可以用的,如果反射的类是显式的,是没有问题,但如果类型是隐式的,比如反射泛型的类型,返回为空。其实只要调用一次type.GetMembers(),让编译器留下类型成员,就可以使用泛型反射,也就是提前得知类型组成,后期在反射时使用即可。如果这样的话,不建议每个类型提前获取成员,不如用源生成器提前把所有类型成员都提取成一个资源文件,然后在对应的功能处,使用该资源文件即可。
再有就是如果用 [JsonConverter(typeof(JsonStringEnumConverter))]来标识枚举,不会起作用,换成 [JsonConverter(typeof(JsonStringEnumConverter<Sex>))]来显示告知Sex才行。
另外还有一个要命的事,就是AOT项目调试模式的表现和发布后的表现不一致,就像上面两个点,在VS中运行,一点毛病没有,发布后运行,就会发现行为不一致,所以这里也是一个坑,相信随着AOT成熟,这块会有改善。
总体来说,在开发AOT项目时,建议开发完一块,就要发布一下,验证哪里有问题,早发现早改进。第二就是一定要了解使用的库,确保这些库完美支持AOT。第三就是一定通过性能测试来验证项目的可靠性。
文章来源微信公众号
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下