exe と dll を一つにまとめる ILMerge の使い方 (C#)
はじめに
C# で、Windows Forms アプリケーションやコンソールアプリケーションを作成する時、 NuGet 等から便利なパッケージを追加していくと、参照するアセンブリ (dll) が増えてしまい、使い勝手が悪くなってしまいます。
そこで、 ILMerge を使用し、アセンブリを一つの exe ファイルにまとめることにより、 exe ファイル一つだけ管理すればいいので使い勝手が良くなります。
ILMerge のダウンロード
まずは ILMerge.exe をダウンロードします。いくつか方法がありますが、NuGet でパッケージをダウンロードする方法と、インストーラ形式でインストールする場合があります。
NuGet でのインストール
NuGet で、ILMerge を検索してインストールします。ソリューションフォルダの packages\ILMerge.(version)\tools\
にファイルがダウンロードされます。
インストーラ形式でのインストール
以下のページから、ILMerge.msi という名前のインストーラをダウンロードします。
ダウンロードしたファイルを実行し、画面の説明に従ってインストールします。64bit の Windows7 の場合、C:\Program Files (x86)\Microsoft\ILMerge\
にインストールされます。
※使用する際、環境変数 PATH に exe ファイルのパスを含めておくと、いちいちパスを記述する必要がなく使い勝手がよいです。
ILMergeの使い方
ILMerge はコンソールアプリケーションのため、コマンドプロンプトから使用します。基本的な構文としては以下の通りです。
1>ilmerge /out:(マージ後.exe) (マージ前.exe) (マージ対象.dll)
例えば、 TestA.exe と TestB.dll をまとめて TestC.exe にするには、以下のようにします。
1>ilmerge /out:TestC.exe TestA.exe TestB.dll
または、複数の dll を一度にまとめる場合は、ワイルドカードオプションを使用します。
1>ilmerge /wildcards /out:TestC.exe TestA.exe *.dll
コマンドプロンプトを開き、引数をつけずに実行するとオプション一覧が表示されます。
1>ilmerge 2Usage: ilmerge [/lib:directory]* [/log[:filename]] [/keyfile:filename [/delaysign]] [/internalize[:filename]] [/t[arget]:(library|exe|winexe)] [/closed] [/ndebug] [/ver:version] [/copyattrs [/allowMultiple]] [/xmldocs] [/attr:filename] ([/targetplatform:<version>[,<platformdir>]]|v1|v1.1|v2|v4) [/useFullPublicKeyForReferences] [/zeroPeKind] [/wildcards] [/allowDup[:typename]]* [/allowDuplicateResources] [/union] [/align:n] /out:filename <primary assembly> [<other assemblies>...]
よく使用するオプションは以下の通りです。
- /log[:filename] : 指定した場合ログを出力します。ファイル名の指定がない場合は、コンソールにログが出力されます。default:false
- /ndebug : 出力ファイル用の pdb ファイルの作成、および、入力ファイルの pdb ファイルのマージを設定します。 pdb ファイルを作成しない場合は、false を設定します。default:true
- /wildcards : ワイルドカードを使用して、入力ファイルをマッチングします。default:false
その他のオプションに関しては、以下を参照してください。