Dotnet 提前:PublishReadyToRun vs PublishAot vs RunAOTCompilation

Rah*_*hul 8 .net c# aot

最近的 dotnet 版本(dotnet 6 和 7)具有提前 (AOT) 编译功能。根据官方文档,有不同的方法可以实现这一目标。

原生 AOT 部署

  <PropertyGroup>
    <PublishAot>true</PublishAot>
  </PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

准备运行编译

  <PropertyGroup>
    <PublishReadyToRun>true</PublishReadyToRun>
  </PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

AOT Blazor WebAssembly

<PropertyGroup>
  <RunAOTCompilation>true</RunAOTCompilation>
</PropertyGroup
Run Code Online (Sandbox Code Playgroud)

仅通过阅读文档很难理解这个概念。PublishReadyToRun 与 PublishAot 之间有什么区别?何时使用其中一种而不是另一种?以及如何为类库、blazor wasm 和 asp.net core 项目启用 AoT 编译?

小智 5

AOT 的意思是:编译器将生成本机代码可执行文件,应用程序可以在未安装 .NET 运行时的机器上运行。

R2R 编译是“AOT 的一部分”。您的应用程序需要安装 .NET 运行时才能运行。但是,与完全 .net 二进制文件相比,启动性能得到了提高。

  • 如果您使用独立发布,则不需要安装 .NET 运行时。它包括所有必需的 .NET 运行时程序集和与应用程序程序集并排的服务。其实ReadyToRun就是一个启动时间的优化。它将尽可能多的方法编译为特定于平台的本机代码,并将其与 MSIL 和类型元数据一起放置。对于在 R2R 阶段无法编译的方法,JIT 仍然需要 MSIL。 (2认同)