You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET中PublishReadyToRun、PublishAot、RunAOTCompilation的区别与启用方法

PublishReadyToRun 与 PublishAot 的区别及适用场景

核心区别

编译原理与运行依赖

  • PublishReadyToRun(R2R):将IL代码提前编译为目标平台的机器码,但仍保留原始IL代码。运行时仍依赖.NET Runtime,仅常用路径的代码无需实时JIT,不支持的特性可自动回退到JIT编译。
  • PublishAot(Native AOT):将IL代码完全编译为目标平台的原生机器码,不保留IL代码。生成的可执行文件可独立运行,无需用户预先安装.NET Runtime。

性能与体积

  • 启动速度:Native AOT > R2R > 纯IL编译。Native AOT无JIT编译和Runtime加载开销,启动最快;R2R仅减少部分JIT步骤,启动速度有明显提升但逊于Native AOT。
  • 发布体积:纯IL < R2R < Native AOT。Native AOT需打包Runtime相关的原生依赖,体积最大;R2R因保留IL且依赖系统Runtime,体积介于两者之间。

兼容性

  • R2R:兼容性几乎与纯IL一致,支持所有.NET特性,遇到不兼容场景可自动回退JIT编译。
  • Native AOT:兼容性有限,不支持反射动态生成代码、动态加载程序集、System.Reflection.Emit等特性,需提前做兼容性检查并修改代码。

适用场景

PublishReadyToRun

  • ASP.NET Core容器化应用:平衡启动速度与包体积,云原生场景下快速启动且避免Native AOT的兼容性限制。
  • 通用类库:为依赖它的应用提供R2R编译版本,整体提升应用启动速度。
  • 无法兼容Native AOT的复杂应用:在不修改代码的前提下,获得部分提前编译的性能收益。

PublishAot

  • CLI工具、无服务器函数:追求极致启动速度,无需用户安装.NET Runtime。
  • 独立分发的桌面/控制台程序:单文件可执行,简化用户部署流程。
  • 资源受限环境:内存占用更低,适合嵌入式、边缘计算场景。

各类项目启用AOT编译的方法

类库项目

启用PublishReadyToRun

在类库的.csproj中添加配置:

<PublishReadyToRun>true</PublishReadyToRun>

发布时会生成目标平台的R2R编译程序集,同时保留IL以保证兼容性。

适配Native AOT(作为应用依赖)

类库本身无法单独Native AOT发布,需确保类库不使用Native AOT不支持的API(如反射动态创建类型),再在引用该类库的Native AOT应用的.csproj中配置<PublishAot>true</PublishAot>,发布时类库会被一同编译为原生机器码。

Blazor WebAssembly项目

启用AOT编译需在.csproj中添加:

<RunAOTCompilation>true</RunAOTCompilation>

发布后,Blazor的IL代码会被编译为浏览器可执行的WebAssembly原生代码,提升运行性能,但会增加发布时间和包体积。

ASP.NET Core项目

启用PublishReadyToRun

在.csproj中添加配置:

<PublishReadyToRun>true</PublishReadyToRun>

发布命令示例:

dotnet publish -c Release -r win-x64 --self-contained true

(--self-contained为可选参数,依赖框架部署时可省略)

启用PublishAot(.NET 7及以上支持)

在.csproj中添加配置:

<PublishAot>true</PublishAot>

发布命令示例:

dotnet publish -c Release -r linux-x64 --self-contained true

注意:发布前需确保应用兼容Native AOT,运行发布命令时会输出兼容性警告,需修复后再完成发布。


内容的提问来源于stack exchange,提问作者Rahul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 22:10:44