misc.log

日常茶飯事とお仕事と

C#でビルド後のファイルを1つに統合する(ILMergeを使う)

先に書いておきますが詳しい使い方とかじゃないです。極力簡単なやりかた。

数年前に、客先でちょっとしたアプリを作ったのですが、顧客があまりPCとかに詳しい人では無かったので、成果物を1ファイルにしたいと言うことでILMergeを利用しました。これは、複数のDLLなどを利用する.NETアプリの、ビルド後アセンブリを統合して1個にするツールです。作るのがちょっと手間でしたが、配布後のといあわせやトラブルは減りますし、楽でした。

今回、新人向けのプログラミング課題で新人に自作DLLを渡すにあたり、Newtonsoft .Json.dllなど他のDLLを含めた複数ファイルでの引き渡しを行いたくなかったので、Visual Studio 2017で初めてILMergeを使ってみることにしました。それも、最もお手軽な手順で。多分またやるときに忘れて調べる事になるので、自分用にメモしておきます。

どうも2017だとILMergeは最初からは入っていないようなので、下記の手順でNuGetパッケージマネージャーからインストールします。

  1. [プロジェクト]-[NuGetパッケージの管理]でNuGetの検索画面を開く。
  2. 参照タブの検索ワードに「ILMerge」を入れて検索。
  3. 結果から次の2つをインストールする → 「ILMerge」「MSBuild.ILMerge.Task」。
NeGetによるILMergeインストール結果
NuGetでILMergeをインストールした結果

これだけです。これで、導入したプロジェクトはビルドすると自動的に全部のDLLやらなにやらを統合して1ファイルにしてくれます。出力フォルダーも「bin/Release」などいつも通りなので、リネームとかいろいろ考えてバッチを組む必要もありません。クラスライブラリープロジェクトでも大丈夫です。複数DLLがまとまって1つのDLLになります。お手軽ですね。

なお、NuGetでインストールしたILMerge本体は、プロジェクトのフォルダーに出来る「Packages」フォルダーに入ってます。そこのILMergeを直接実行して手作業で統合することもできそうです。