使用CoreRT编译C#项目为机器码

关于 CoreRT :

CoreRT 是一个可以将 CIL(MSIL) 中间码编译为机器码 (例如 X64, X86, ARM 架构) 的工具链,CoreRT 默认使用 RyuJIT 作为编译器(AOT),它也是 .NET Core 的默认 JIT 编译器,除了可以将代码编译为机器码可以无需运行库直接分发以外,还带来了一定的性能提升。

CoreRT 目前 (2018年8月) 仍处于 Alpha 阶段,请酌情使用。

准备工作:

要尝试 CoreRT,需要安装 .NET Core SDK,请访问 官方下载页面 根据介绍下载并安装,本文编写时已在 Windows 10 和 Ubuntu 18.04 上测试。

为了减少外部因素带来影响的概率,将使用 .NET Core CLI 默认的 Hello World 作为演示。

开始:

  • 使用 `dotnet new console -o sample` 创建一个名为 sample 的项目
  • 进入项目目录,执行 `dotnet new nuget` 初始化 Nuget 配置文件
  • 编辑当前目录中的 nuget.config,将以下内容粘贴到文件内并保存
<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <packageSources>
    <!--To inherit the global NuGet package sources remove the <clear/> line below -->
    <clear />
    <add key="dotnet-core" value="https://dotnet.myget.org/F/dotnet-core/api/v3/index.json" />
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
 </packageSources>
</configuration>
  • 执行 `dotnet add package Microsoft.DotNet.ILCompiler -v 1.0.0-alpha-*` 安装预编译的 ILCompiler
  • 执行 `dotnet publish -r win-x64 -c Release` 将项目编译为可执行程序。请注意,如果你在使用 Linux,这里的 `win-x64` 需要替换为 `linux-x64`

编译完成后即可在 bin\Release\netcoreapp2.1\win-x64\native 中找到编译为机器码而非 CIL 中间码的可执行程序。本次测试的 Hello World 编译后的体积为 3.8MB。

提示:

如果在执行时遇到长时间停留在 "正在还原 ...\sample.csproj 的包..." 的情况,可以手动结束 dotnet.exe 进程并参考 使用 PowerShell Profile 快速设置 HTTP 代理 文中的方法设置 HTTP 代理,重新执行对应的命令。

发表评论

电子邮件地址不会被公开。 必填项已用*标注