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。第三就是一定通过性能测试来验证项目的可靠性。

  文章来源微信公众号

  想要更快更方便的了解相关知识,可以关注微信公众号 

posted @   刘靖凯  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示