備忘録

備忘録

.NET CoreのアプリケーションをCoreRTを利用してビルドする方法

Ⅰ. はじめに

タイトルの通り「.NET CoreのアプリケーションをCoreRTを利用してビルドする方法」です。

CoreRTを利用することにより以下の恩恵が受けられます。

  • 1つの実行ファイルのみ出力される
  • AOTコンパイラによりネイティブコードを出力する為、JITコンパイラを利用した場合より高速にアプリケーションが動作する
  • 配布先のPCで.NET Coreランタイムをインストールする必要がない

Ⅱ. やり方(Windows

環境
1. プロジェクトを作成する
dotnet new console -o myApp
cd myApp
dotnet new nuget
notepad nuget.config

nuget.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <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-* 
2. ビルドする
dotnet publish -r win-x64 -c Release
3. 実行結果
> bin\Release\netcoreapp2.2\win-x64\publish\myApp.exe
Hello World!

Ⅲ. やり方(Linux

環境
1. 必要なものをインストールする
sudo apt-get install cmake clang-3.9 uuid-dev libcurl4-openssl-dev zlib1g-dev libkrb5-dev

wget http://security.ubuntu.com/ubuntu/pool/main/i/icu/libicu55_55.1-7ubuntu0.4_amd64.deb
sudo dpkg -i libicu55_55.1-7ubuntu0.4_amd64.deb
2. プロジェクトを作成する
dotnet new console -o myApp
cd myApp
dotnet new nuget
vim nuget.config

nuget.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <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-* 
3. ビルドする
dotnet publish -r linux-x64 -c Release
4. 実行結果
$ ./bin/release/netcoreapp2.2/linux-x64/publish/myApp 
Hello World!

その他

Q. クロスコンパイルは可能ですか?

A. 不可能です。(2019/01/04時点)
https://github.com/dotnet/corert/issues/5458

Q. IL2CPPは利用できますか?

A. できます。しかし開発段階の為不安定です。(2019/01/04時点)

dotnet publish /p:NativeCodeGen=cpp -r win-x64 -c Release