VB.NET: Visual Studio2019: 単一ファイル.exe を出力するオプション

長かった。Visual Basic で書いたプログラムのデバッグ後、オブジェクトを単一の .exe ファイルにまとめるオプションにたどり着くまでが。

RadikoPad_cmd.exe を作成し、ラジコプレミアムの番組をダウンロードするためのコンソールモードを作ることには成功したのですが、ビルド後に RadikoPad_cmd.exe 他、複数のファイルが出来上がってしまい、また、ランタイムモジュールをユーザ地震にインストールしてもらう必要があり、まだ不満足な結果です。

これを(設定ファイルや ffmpeg を除いて)単一の .exe ファイルにまとめる方法を探していましたが、調べなくちゃいけないことが山ほどあったり、コロナワクチン接種と副反応で一服していたため、なかなか目的の情報にたどり着けていませんでした。

そして、ようやく参考になるYouTube情報にたどり着けました。

解説自体は Visual Studio 2022 の C# ですが、Visual Studio 2019 でも考え方は同じでした。

同時に、対象CPUのカスタマイズ方法もわかりました。ビルドするバイナリーを変更するだけで作られるのなら、MacOS版も簡単に作れそうだわ。ただし、外部コマンド(curl, ffmpeg)のありかや名称が異なっているので、それは書き直さなくちゃいけなさそう。あと、config.ini の中の PATH情報も、バックスラッシュとスラッシュが違うし。

Visual Studio 2019 では、プロジェクトを選択して、発行を行うと、下図のような公開オプションが出てくるので、フォルダーに公開するように選択して続けて、鉛筆マーク(どれでもいい)をクリックしてプロファイル設定ウィンドウを開きます。

そこで、ファイルの公開オプション単一ファイルの作成 にチェックすると、必要なファイルが一つの exe ファイルにまとまるようです。ただし、これだけだと .NET Framework バージョンが異なってOSモジュールのインストールが必要になるので、配置モード自己完結 にする必要があるようです。(VS2019は .net core 3.1 なのでこれは素のWin10には入っていないようです。)

さらに、32bit/64bit Windows10 で動くようにするために、ターゲットランタイムに win-x86 を選択しました。
Intel Win10で動作する単一実行ファイルを作る場合はこれでOK。

visual studio 2019 publish オプション 単一実行ファイル

未使用のアセンブリをトリミングする というオプションは、使われないサブルーチンなどの削除の事だと思います。オブジェクトを小さくするためにチェックしてみました。

保存した後、画面右上の 発行 ボタンを押すと、単一ファイルのビルドが始まります。実際には、.exe 一個じゃなく、.pdb ファイルが出来ますが、これはデバッグ情報が含まれているだけの不要ファイルのようで、消しても大丈夫です。YouTube動画では、これもファイルに含めることが出来るようですが、要らないかな~。

問題は exe ファイルのファイルサイズ。

RadikoPad_cmd.exe は、ランタイムをデフォルト設定でビルドすると、わずか150kBくらいだったのが、単一ファイルにまとめると、なんと23MBオーバー。。。。。。。ほとんどが .net core のランタイムだろうと思います。zip圧縮すると半分くらいになりますけど、元の .exe ファイルの100倍ですよ。これを配布すべきかどうか、迷います。

ちなみに私が Visual Studio 2022 じゃなく 2019 の画面を使っているのは、オプションが設定がシンプルなためだけです。

そうそう、出来上がった巨大な .exe ファイルをビルドしたのとは異なるPCにコピーして実行したところ、動きました。さらに、64bit Windows7 PCにコピーして動かしてみたところ、デフォルト設定でビルドした .exe ファイルは必要なライブラリーが見つからず動かなかったものが、今回は途中まで動きました!Windows7 には curl.exe が無いのでエラーで終わりますが、curl.exe をどこからか持ってきて、PATHが通ったフォルダーにコピーすれば、Win10 以外でも動くんじゃなかろうか?まあ、そこまでやらなくてもいいとは思いますが。

最後に、以下が、参考にさせていただいた動画です。

コメントを残す