AOT项目开发注意事项

63c92454a5ce7313c488e6e2a3d9f76d.png

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

-

技术群:添加小编微信并备注进群

小编微信:mm1552923   

公众号:dotNet编程大全    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值