アプリを作るとき、参照する自作アセンブリが地味に増えてきて、しかも 1 つ 1 つは大したこと無い内容だったりするので、exe ファイル 1 つにまとめてしまいたいなーと思い、ILMerge を試しました。このツールを使うと、複数のアセンブリを 1 つにまとめることができます。また、Public なクラスなどのアクセス修飾子を Internal に変更して、外部から参照できないようにするオプションも指定可能なので、そちらも試してみました。
ILMerge の入手方法
下記のサイトからダウンロードできます。
実行方法
C:\TestSolution ソリューション内の App.exe と Common.dll をまとめて AppMerged.exe を作成することにします。
下記のコマンドを実行します。
1 2 3 4 5 6 7 8 |
"C:\Program Files (x86)\Microsoft\ILMerge\ILMerge" /targetplatform:"v4,C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1" /out:"C:\TestSolution\App\bin\debug\AppMerged.exe" "C:\TestSolution\App\bin\debug\AppMerged.exe" "C:\TestSolution\App\bin\debug\Common.dll" /internalize |
2 行目:今回は対象のフレームワークが .NET 4.5.1 なので、このように指定しています。別のバージョンなら、指定を変更する必要があります。
3 行目: 複数のアセンブリがまとめられた結果、作成されるアセンブリのパスを指定します。
4,5 行目: まとめる対象のアセンブリのパスを指定します。もっとたくさんある場合は、何個でも並べて指定すればオッケー。
6 行目: Public なアクセス修飾子を、Internal に変換する場合の指定。変換しないなら、この指定は不要です。
3 行目: 複数のアセンブリがまとめられた結果、作成されるアセンブリのパスを指定します。
4,5 行目: まとめる対象のアセンブリのパスを指定します。もっとたくさんある場合は、何個でも並べて指定すればオッケー。
6 行目: Public なアクセス修飾子を、Internal に変換する場合の指定。変換しないなら、この指定は不要です。
上記のコマンドを、ビルド イベントのビルド後に実行するコマンドラインに設定しておくと、ビルドのたびに自動でマージが行われるのでラクチンです。
1 2 3 4 5 6 7 8 |
"C:\Program Files (x86)\Microsoft\ILMerge\ILMerge" /targetplatform:"v4,C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1" /out:"$(TargetDir)$(TargetName)Merged$(TargetExt)" "$(TargetPath)" "$(TargetDir)Common.dll" /internalize |
“$(TargetDir)”などのマクロは、コマンド実行時に展開されます。