.NET 7 预览版2 的亮点之 NativeAOT 正式合并入 .NET 主线
.NET 中备受追捧和期待已久的功能NativeAOT终于出现在本周的.NET 7 预览版2中,该项目的工作仍在继续,该版本将 NativeAOT 从实验性的 dotnet/runtimelab repo 中移出合并进入稳定的运行时库 dotnet/runtime repo,但尚未在 dotnet SDK 中添加足够的支持,以使用 NativeAOT 发布项目。完成此操作后,可以对实际测试进行完善了。
.NET NativeAOT 编译器脱离实验性质正式跟随 .NET 7 Preview 2 发布到了官方 nuget 源:https://www.nuget.org/packages/Microsoft.DotNet.ILCompiler 。
从现在开始,7.0.0-* 版本基本可以放心用在生产环境。我们可用开始尝试修剪我们的应用程序,并确保没有剪裁警告。剪裁是 NativeAOT 的要求。GitHub 问题 .NET 7 中的 NativeAOT #61231 显示了正在检查的初始工作以及第一阶段的剩余工作:
NativeAOT 这个功能的完整支持真是不容易,具体怎么用可用参考 hez2010的文章:。
这里来回顾一下这个历程:具体内容来自知乎的hez2010 的整理的内容 https://www.zhihu.com/question/472875939 :
Native AOT (2021.1~2021.7)的进展:
2021/8/12 更新:
- 正在添加对 ARMv7 平台的支持(已有 PR)
- 正在添加对接口泛型方法默认实现的支持(已有 PR)
2021/8/14 更新:
- 接口泛型方法默认实现已支持,因此 efcore 可以用 NativeAOT 了
- 泛型虚拟方法解析速度有所提升(大概 8%),编译时间更短了
2021/8/17 更新:
- NativeAOT 在 .NET 6 上计划的内容已经完成,已经可以稳定使用,另外可能会在 .NET 7 脱离实验正式发布
- ARMv7 平台支持已接近完成
2021/8/24 更新:
- NativeAOT 编译器版本已提升至 7.0.0-*
2021/9/6 更新:
- 正在适配安卓
- LLVM 从 6 升级到 12
- 完善
IDynamicInterfaceCastable
支持,对 COM 的支持度进一步改善
2021/9/17 更新:
- 支持了模块初始化器
- 正在添加对 x86 的支持
2021/12/6 更新:
- Native AOT 转正正式提上 .NET 7 计划
2021/12/15 更新:
- Native AOT 代码正式合并入 .NET 主线并启用了构建
- 无限泛型展开导致无法编译的问题已经解决
2022/3/17 更新:
1. 正式在.NET 7 Preview 2博客文章中宣布可用。
2. WPF 开始了 AOT 改造: https://github.com/dotnet/wpf/pull/6171