readytorun(r2r)是.net 5+中通过dotnet publish启用的提前编译优化,需release配置、指定runtime并设置publishreadytorun=true,生成平台绑定的含本地代码的.dll镜像,仍依赖.net运行时。
ReadyToRun 编译怎么开
ReadyToRun(R2R)是 .NET 5+ 中对 IL 程序集做的提前编译优化,生成平台相关的机器码镜像,运行时可跳过 JIT 编译阶段。它不是独立构建模式,而是 dotnet publish 的一个选项:
- 必须用
Release配置,Debug 下默认禁用 - 需指定
--runtime(如win-x64、linux-arm64),R2R 镜像是平台绑定的 - 启用方式:加
--no-self-contained false(默认)或--self-contained true,再加--crossgen2参数(.NET 6+ 默认启用crossgen2) - 显式开启 R2R:在
.csproj中添加<publishreadytorun>true</publishreadytorun>
示例命令:
dotnet publish -c Release -r win-x64 --self-contained true -p:PublishReadyToRun=true
生成的输出目录里,.dll 文件会被 crossgen2 处理成含本地代码的“R2R 镜像”,文件大小明显增大,且 dotnet --list-runtimes 不影响其运行(它仍依赖 .NET 运行时)。
R2R 和 Native AOT 的根本区别
R2R 是“带本地代码的托管程序”,Native AOT 是“彻底脱离运行时的原生二进制”。二者目标相似(启动快、内存省),但技术路径和约束完全不同: