■ 結論
・Windows 向けにはコンソールで次のようにタイプして発行します。
>dotnet publish -c Release --self-contained true -r win-x64
・Linux 向けには
>dotnet publish -c Release --self-contained true -r linux-x64
・mac 向けには
>dotnet publish -c Release --self-contained true -r osx-x64
■ 前書き
.NET Core アプリケーションは発行する際に
- フレームワークに依存する展開
- 自己完結型の展開
を選択して発行できます。
※.NET Core 2.2 以降では フレームワークに依存する実行可能ファイル もありますが、ここでは省略します。
参考:.NET Core アプリケーションの展開
※この記事では NetCoreConsoleApp1 という名前でアプリを作っています。コマンドは実際に作成するアプリ名に置き換えて使ってください。
□ フレームワークに依存する展開
実行には .NET Core がインストールされた環境が必要で、コンソールで
>dotnet NetCoreConsoleApp1.dll
のようにして実行できます。
□ 自己完結型の展開
こんな感じに大量のファイルが出力フォルダに生成/コピーされます。
Windows 向けに発行した場合、画像の様に .exe ファイルも生成され、コンソールで
>NetCoreConsoleApp1.exe
のようにして実行できます。
■ 自己完結型の展開は何がうれしいの?
色々な意見があると思いますが、例えば現実として .NET Framework が古いバージョンしかインストールされておらず、限定した機能しか使えないなんてことがあります。
自己完結型であれば、実行環境のランタイムのバージョンに悩まされることがなくなります。
また、作ったアプリケーションを配布する際にも、.NET Framework や .NET Core が良くわからないという方向けに配布する場合も多いでしょう。特に商用アプリケーションなど、ユーザーにそこまでの PC スキルを求めるのも厳しいでしょう。
そんなとき、配布バイナリをただ PC 上に置けば OK のこの形式が悩みを解決してくれると期待しています。
□ 自己完結型の展開の欠点
配布サイズが非常に大きくなります。(Hello World アプリケーションで64~70 MB)
実行環境のランタイムのセキュリティアップデートという概念がないので、セキュリティアップデートなどでもアプリケーションの配布しなおしになる可能性があります。
■ Visual Studio 上から発行
Visual Studio からは GUI でポチポチして発行できます。
ちなみに、フレームワーク依存
でポータブル以外を選択してもあまり意味はなさそうです。
※もしかしたら作成されるバイナリが少し小さくなっているかもしれません。
発行
で発行されます。
■ コマンドで自己完結型の発行
オプションの詳細は 公式ドキュメント を参照してください。
ここでは、今回の発行にかかわるオプションを見て行きます。
-c
ビルドの構成を指定します。Release
またはDebug
。デフォルトはDebug
。--self-contained
true
で自己完結型
、false
でフレームワーク依存
になります。true
(自己完結型) の場合、次の-r
オプションが必須です。-r
実行環境を指定します。先の例だとwin-x64
linux-x64
osx-x64
のいずれかを指定しています。
より詳しい OS のバージョンやディストリビューションも指定できますが、全容は 公式ドキュメント を参照してください。
■ Windows 向けの発行
Windows 向けに発行すると次のように ファイル数: 217 サイズ: 66.0 MB (69,235,565 バイト) が出力されます。
見慣れた System.dll の他、coreclr.dll といった dll 群と実行形式 NetCoreConsoleApp1.exe が出力されます。
コンソールで次のようにタイプすると実行できます。
>NetCoreConsoleApp1.exe
■ Linux 向けの発行
Linux 向けに発行すると次のように ファイル数: 184 サイズ: 70.6 MB (74,043,517 バイト) が出力されます。
見慣れた System.dll の他、libcoreclr.so といった so 群と実行形式 NetCoreConsoleApp1 が出力されます。
コンソールで次のようにタイプすると実行できます。
>./NetCoreConsoleApp1
■ mac 向けの発行
mac 向けに発行すると次のように ファイル数: 183 サイズ: 64.5 MB (67,687,745 バイト) が出力されます。
見慣れた System.dll の他、libcoreclr.dylib といった dylib 群と実行形式 NetCoreConsoleApp1 が出力されます。
コンソールで次のようにタイプすると実行できます。
>chmod 744 NetCoreConsoleApp1 >./NetCoreConsoleApp1
■ 結論
・Windows 向けにはコンソールで次のようにタイプして発行、実行します。
>dotnet publish -c Release --self-contained true -r win-x64 >NetCoreConsoleApp1.exe
・Linux 向けには
>dotnet publish -c Release --self-contained true -r linux-x64 >./NetCoreConsoleApp1
・mac 向けには
>dotnet publish -c Release --self-contained true -r osx-x64 >chmod 744 NetCoreConsoleApp1 >./NetCoreConsoleApp1