しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

.NET Core Runtime (CoreCLR) / .NET Compiler Platform (Roslyn) / .NET Execution Environment (DNX) の役割について理解したい

自分でも最近の .NET Core 5 周りで混乱してきたので、整理するために簡単にまとめました。略称も色々なので、そのあたりと役割も一緒に分かってる範囲で書きます。

.NET Core Runtime (CoreCLR)

GitHub でオープンソースになると話題になった部分で、RyuJIT や GC などマネージコードの実行に必要な機能を提供します。.NET Framework を 1 つの DLL にした感じです。

ビルドすると以下のようにバイナリが生成されます。

Windows Linux OS X
共有ライブラリ coreclr.dll libcoreclr.so libcoreclr.dylib
エントリポイント corerun.exe corerun corerun

既に Linux / OS X でも x64 であればコンパイルして、実行可能なレベルにまで開発が進んでいるようです。

.NET Compiler Platform (Roslyn)

Roslyn は既に知っている人も多いと思いますが、C# で書かれた新しいコンパイラーです。

コンパイラーを構成しているコンポーネントを API として公開しているので、その API を使ってコード解析を行ったり、アプリケーションに C# スクリプティング機能を付けたりやりたい放題です。

まさしくコンパイラープラットフォームですね。終わり。

.NET Execution Environment (DNX)

元々 KRuntime と呼ばれていた部分です。ASP.NET 5 との結び付きがとても強いイメージがあると思いますが、実際のところは名前の通り単なる実行環境です。

ぶっちゃけ CoreCLR で実行するのと、何が違うんだという感じがしそうなので表にしました。

CoreCLR DNX
ライブラリ CoreCLR 用にコンパイルした dll nupkg 形式 (Full CLR / CoreCLR の dll 含む)
ライブラリの参照 コンパイル時に dll を指定 project.json に定義、NuGet からダウンロード
コンパイル 予めコンパイルが必要 実行時に Roslyn を使ったコンパイルも可能
実行方法 corerun コマンド dnx コマンド(今はまだ k のまま)

corerun は単純に実行ファイルを動かすだけのエントリポイントにしかすぎませんが、DNX を使うことで依存関係の解決からコードのコンパイル、実行まで一通り面倒を見てくれるという感じですね。

ちなみに DNX はクロスプラットフォームな環境でも動作します。

ASP.NET 5 との関わり

ASP.NET 5 では Roslyn と DNX に、ASP.NET Core 5 では Roslyn と DNX だけでなく CoreCLR にも依存するようになっています。

なので、ASP.NET Core 5 はかなり注意深く扱っていく必要があると思っています。暫くは production な環境に突っ込むことは不可能じゃないでしょうか。こわい。

続きはオフラインで

US で開催される dotNetConf 2015 の内容を受けるのか受けないのか分かりませんが、4/11 に dotNetConf 2015 の日本版を開催することになっています。既に半分埋まっているので、参加希望の方は急ぎましょう。

何故か私は「.NET Core 5 & ASP.NET 5 Open Source, DNX, Websites / Linux / Mac」というヤバそうなセッションを 1 つ担当しています。申し訳程度に Azure Websites が入っているので、実際にデプロイするところまで考えて資料作らないといけないと思っている今日この頃です。