備忘録

備忘録

.NET Coreで実行ファイル1つだけを出力する方法(Warpを利用する場合)(非推奨)

Ⅰ. はじめに

タイトルの通り「.NET Coreで実行ファイル1つだけを出力する方法(Warpを利用する場合)(非推奨)」です。

「.NET Core で 実行ファイル(.exe)を作成する方法」はこちら
https://kagasu.hatenablog.com/entry/2017/04/16/192117

「.NET Coreで実行ファイル1つだけを出力する方法」はこちら
※特に理由がない限りこちらを利用して下さい。
https://kagasu.hatenablog.com/entry/2019/05/08/022255

SCD(Self-contained deployments) を行うと「実行ファイル1つだけ」ではなく、「実行ファイル1つと100個を超えるDLLファイル」が同時に出力されます。
100個を超えるDLLファイルは CoreCLR と呼ばれる .NET Core のランタイムなので削除できません。

その為この記事では「フォルダを圧縮して1つの実行ファイルに埋め込む」事ができる Warp を利用する方法を紹介します。

※2019/05/08 追記
.NET Core 3.0で PublishSingleFile が追加されました。
よって、Warpを利用する方法を非推奨に変更しました。

Ⅱ. Warp とは

.NET Core, Node.js 等に対応した自己展開ファイルを作成する為のアプリケーションです。
実行時に一時ディレクトリに自己展開する為、起動速度以外のパフォーマンスは低下しません。

https://github.com/dgiagio/warp

Ⅲ. やり方

1. 以下記事を参考にしてSCDを行う

https://kagasu.hatenablog.com/entry/2017/04/16/192117

2. Warp をダウンロードする

https://github.com/dgiagio/warp/releases

3. Warp で自己展開ファイルを作成する

WindowsLinux向けファイルを作成する事もできます。

# Windows
warp-packer --arch windows-x64 --input_dir bin/Release/netcoreapp2.1/win-x64/publish --exec myapp.exe --output out.exe

# Linux
warp-packer --arch linux-x64 --input_dir bin/Release/netcoreapp2.1/linux-x64/publish --exec myapp --output out

# macOS
warp-packer --arch macos-x64 --input_dir bin/Release/netcoreapp2.1/osx-x64/publish --exec myapp --output out
4. 実行結果

f:id:kagasu:20181211021547p:plain