Table of Contents

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 之前,你需要确保项目能够支持它。

  1. 确保项目使用的额外库支持 Native AOT。
  2. 确保项目不使用反射。
  3. 确保项目不使用任何其他与 Native AOT 不兼容的特性。

在项目中启用 Native AOT

  1. 找到你要启用 Native AOT 的平台包的 .csproj 文件(例如 MyGame.Windows.csproj)。

  2. 向 PropertyGroup 中添加以下行:

    <PublishAot>true</PublishAot>
    

延伸阅读

有关 .NET 原生 AOT 开发的更多信息,请阅读 Microsoft 文章。