.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本にどうしてもまとめたい場合にはコマンドラインから操作する以外に方法はないようです。
参考:
コメント