AOT项目有特殊模版的,目前支持AOT的模版有Mini API和gRPC。对于Mini API的AOT项目,有几个不同点,下面是我简化后针对开发的不同点:
PublishAot
添加到项目文件,<PublishAot>true</PublishAot>。.NET的很多三方库,包括官方的Json序列化器,都有使用反射,所以在开发时要特别注意,这些不支持的库,要避免使用。
举几个简单例子,普通反射是可以用的,如果反射的类是显式的,是没有问题,但如果类型是隐式的,比如反射泛型的类型,返回为空。其实只要调用一次type.GetMembers(),让编译器留下类型成员,就可以使用泛型反射,也就是提前得知类型组成,后期在反射时使用即可。如果这样的话,不建议每个类型提前获取成员,不如用源生成器提前把所有类型成员都提取成一个资源文件,然后在对应的功能处,使用该资源文件即可。

再有就是如果用 [JsonConverter(typeof(JsonStringEnumConverter))]来标识枚举,不会起作用,换成 [JsonConverter(typeof(JsonStringEnumConverter<Sex>))]来显示告知Sex才行。
另外还有一个要命的事,就是AOT项目调试模式的表现和发布后的表现不一致,就像上面两个点,在VS中运行,一点毛病没有,发布后运行,就会发现行为不一致,所以这里也是一个坑,相信随着AOT成熟,这块会有改善。
总体来说,在开发AOT项目时,建议开发完一块,就要发布一下,验证哪里有问题,早发现早改进。第二就是一定要了解使用的库,确保这些库完美支持AOT。第三就是一定通过性能测试来验证项目的可靠性。