ILMergeを使ってDLLファイルを結合することがあったので、そのときに触ったオプションについて記載します。
基本ケース
B.dllとC.dllを結合してA.dllを作成します。
ilmerge /out:A.dll B.dll C.dll
オプション
/target
library、exe、winexeが使えます。
特にtarget指定しなくても、以下のDLL同士の結合は問題なくできました。
何かdllからexeとかに変更するときに指定するのかもしれません。
ilmerge /target:library /out:A.dll B.dll C.dll
/internalize[:filename]
publicのものをinternalにします。
ilmerge /internalize /out:A.dll B.dll C.dll D.dll
とすると、CとDはinternalになります。
ilmerge /internalize:exclude.txt /out:A.dll B.dll C.dll D.dll
とした場合、exclude.txtにNamespaceまたclassを記載して、internalにしないものを指定します。
例として、exclude.txtにC.dllのNamespaceを指定した場合は、internalになるのはD.dllだけになります。
/ndebug
指定することで、pdbファイルを同梱しないように設定できます。
デバッグ用途でない場合は指定しておけばよさげです。
オプションのリスト
Usage: ilmerge [/lib:directory]* [/log[:filename]] [/keyfile:filename [/delaysign]] [/internalize[:filename]]
[/t[arget]:(library|exe|winexe)] [/closed] [/ndebug] [/ver:version] [/copyattrs [/allowMultiple] [/keepFirst]]
[/xmldocs] [/attr:filename] [/targetplatform:<version>[,<platformdir>] | /v1 | /v1.1 | /v2 | /v4]
[/useFullPublicKeyForReferences] [/wildcards] [/zeroPeKind] [/allowDup:type]* [/union] [/align:n]
/out:filename <primary assembly> [<other assemblies>...]