.NET 5でシングルバイナリを作る

.NET Coreから.NETのアプリケーションを1本の実行ファイル(シングルバイナリ)にする方法が出来て、.NET 5でも当然引き継がれています。

ちなみに、シングルバイナリファイルを正式には単一ファイルアプリケーション(Single-file Publish)と呼びます。

dotnetコマンドでシングルバイナリを作成する。

.NET 5でシングルバイナリを作るにはコマンドラインでは以下の方法があります。

Linux: dotnet publish -r linux-x64 /p:PublishSingleFile=true

このコマンドラインではHelloWorld, HelloWorld.pdbの二つのファイルが作成されます

Windows : dotnet publish -r win-x64 /p:PublishSingleFile=true

このコマンドラインでは次のファイルが作成されます。

HelloWorld.exe, HelloWorld.pdb, coreclr.dll, clrjit.dll, clrcompression.dll, mscordaccore.dll

Windowsでは一つのファイルとは行かずにいくつかの最低限のライブラリDLLをいっしょに配置する必要があります。これでは「シングルバイナリー」とは呼びづらいですね。

Linuxと同様に1つのEXEファイルにランタイムライブラリもまとめたい場合には以下のようにします。

Windows: dotnet publish -r win-x64 /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true

これで生成されるファイルは以下の二つになります。

HelloWorld.exe, HelloWorld.pdb

先ほどまとめたい場合と書きましたが、それには理由があり、この1本に見えるEXEファイルは実際には自己展開される圧縮ファイルであり、先ほど/p:IncludeNativeLibrariesForSelfExtract=trueが指定されなかった場合に配置されたランタイムのDLLが実行ファイルといっしょに自己解凍方式の圧縮ファイルに圧縮されている形式になります。ただし、この方法でWindowsでも1本のEXEファイルにする事はできました。

Visual Studio 2019でシングルバイナリを作成する

プロジェクトファイルのコンテキストメニューから発行を選択します。

フォルダを選択します。

ここでもフォルダを選択します。

とりあえずこのままでもかまいません。

公開の設定画面になるので、上の図の矢印の先にあるペン型のアイコンクリックします。

プロファイル設定画面で詳細を設定します。大事なのは配置モードを自己完結にすること、ファイル公開オプションで単一ファイルの作成を選択します。この設定内容で、コマンドラインで次のように設定したのと同じになります。

dotnet publish -r win-x64 /p:PublishSingleFile=true

上のコマンドと同じであるため、発行ボタンをクリックすると以下のファイルが先ほど指定した公開先のフォルダに生成されます。

HelloWorld.exe, HelloWorld.pdb, coreclr.dll, clrjit.dll, clrcompression.dll, mscordaccore.dll

現状、VSのGUIからは/p:IncludeNativeLibrariesForSelfExtract=trueオプションを指定する方法がないようなので、WindowsでEXE1本にどうしてもまとめたい場合にはコマンドラインから操作する以外に方法はないようです。

参考:

コメントを残す