Native AOT
中级
C# 及 .NET 生态系统中的其他语言会被编译为通用中间语言(Common Intermediate Language,CIL),计算机无法直接执行它。相反,它需要一个名为 **.NET 运行时(.NET Runtime)的额外软件,由后者使用即时(Just-In-Time,JIT)**编译器将其转换为本机机器码。
这种方式有其优点和缺点:
- 你的代码可以在 .NET 运行时支持的任何平台上运行
- 某些高级语言特性必须依赖它才能工作(例如反射)
- 编译后的项目占用更少的磁盘空间
- 某些平台不支持它(主要是 iOS 和主机平台)
- 会带来额外开销,在某些情况下可能略微降低性能
- 需要用户安装额外的软件(除非应用程序被制作成自包含的)
其替代方案是使用**原生提前(Native Ahead-Of-Time,AOT)**编译来完全跳过 CIL,直接生成原生程序。这样做可以缩短启动时间,并在某些情况下略微提升性能,但代价是失去标准 JIT 编译 .NET 应用程序的所有上述优势。
准备工作
启用 Native AOT 之前,你需要确保项目能够支持它。
- 确保项目使用的额外库支持 Native AOT。
- 确保项目不使用反射。
- 确保项目不使用任何其他与 Native AOT 不兼容的特性。
在项目中启用 Native AOT
找到你要启用 Native AOT 的平台包的
.csproj文件(例如MyGame.Windows.csproj)。向
PropertyGroup中添加以下行:<PublishAot>true</PublishAot>
延伸阅读
有关 .NET 原生 AOT 开发的更多信息,请阅读 Microsoft 文章。