.NET 9.0.200 を対象にした記事です。
はじめに
.NET のビルドには .NET フレームワークなしでも動作するオプションと、実行ファイル(.exe)に関連アセンブリ(.dll)をひとつにまとめるオプションがあります。
これらは組み合わせが可能で、.NET ランタイムが不要かつ実行ファイルをひとつにまとめることができます。アプリを配布するうえで関連アセンブリをインストールする必要がなくなるため、個人的に需要があります。
ビルドコマンド
x64 向け出力
dotnet publish -c Release --self-contained true /p:PublishSingleFile=true --arch x64
x86 向け出力
dotnet publish -c Release --self-contained true /p:PublishSingleFile=true --arch x86
.NET 9.0.200 からアーキテクチャ指定(--arch x64
)が必須になった?かもしれません。
以前のバージョン(.net 9.0.0 くらいまで?)
自己完結型の発行(ランタイム無しで動作する)の方は問題ないのですが、単一ファイル実行可能はひとつにまとまってくれないことがしばしばありました。ひとつにまとまるものと、まとまらないものの差がよくわかっていません。
- 自分が作ったアセンブリ:まとまる
- 標準ライブラリ:まとまる
- x64 / x86 に分離されたライブラリ:まとまらない?
ランタイム指定されているアセンブリや署名の有無が関係するのでしょうか。
ちなみに今回のバージョン .net 9.0.200 でも単一ファイルにならないアセンブリがあるようです。
いずれにせよアプリとしては「動作する」ことが優先で、技術的に難しかったり副作用がある場合は単一ファイルにしない方針なのかもしれません。
おわりに
実は過去のバージョンでひとつにまとまっていた時期がありました(記憶だと ~ .net 5.0 preview5 あたりまで)。割と単一ファイル化は気まぐれで、今後も .net のバージョンが上がるとひとつにまとまらなくなるかもしれません。