単一アプリ発行の単一ファイル化

以前試した単一アプリ発行(Single-file Publish)

以前、Visual Studio 2019を使って単一アプリケーションの発行を試してみました。

takeiteasy-09.net

ですが、Windowsをターゲットにするといくつかのファイルはexeとは別に配置され、単一になっていませんでした。

github.com

こちらのページを見るとdotnetコマンドのpublish時に「IncludeNativeLibrariesForSelfExtract」オプションをつけて発行するとネイティブライブラリも含めた展開ができる、となっていますが、これをVisual Studio上の設定がどこにあるのかわかりませんでした…*1

プロジェクトファイルのプロパティ に入れてみる

発行画面の設定にしたがって設定すると以下になっていますが、このまま発行すると…

f:id:akky97:20201129143335p:plain

↓こんな感じになって単一ファイルにはなっていません。

f:id:akky97:20201129143526p:plain

このページのオプション説明をみるとネイティブライブラリ(要は.net ライブラリではないということ?)は同梱しないようなので、そのライブラリも含めて単一ファイルにする、という指定が必要というのはわかりますが、Visual Studioの設定は書かれてなく…

というわけで、プロジェクトファイルのプロパティ に以下を追記してみました。オプションと同じ内容です。

 <IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract>

手順としてはソリューションエクスプローラをダブルクリックし、csprojファイルを開き、PropertyGroupの配下に追記します。

下記の場合、右側赤枠の「SingleConsole」プロジェクトをダブルクリックして、左側赤枠を追記しています。

f:id:akky97:20201129144147p:plain

これで発行したところ、以下のように単一ファイルになりました。

f:id:akky97:20201129144604p:plain

ファイルサイズは大きくなりすぎる感じはしますが、これで動かす側にランタイムが不要となるならシステムへの配置は実施しやすいと思います。

*1:発行画面に項目がないからまだ設定できない?