138
146

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

実行ファイルとDLLを一つにまとめる

Last updated at Posted at 2012-12-26

Visual C# で、自作のクラスライブラリと実行ファイルを一つにまとめる(静的リンクもどきを行う)やり方です。
Microsoftが提供しているツール「ILMerge」で複数のアセンブリを一つのアセンブリにマージできます。
このツールを使うことで、自作のクラスライブラリのDLLと実行ファイルを一つにまとめることができます。

ILMergeの使い方

インストール後、コマンドプロンプトでこんな感じにコマンド打てばexeとDLLをマージしてくれます。

コマンドプロンプト ILMerge 実行例
"C:¥Program Files¥Microsoft¥ILMerge¥ILMerge" /out:hoge_merge.exe hoge.exe piyo.dll foo.dll

/out: に出力ファイル名を指定します。(この例ではhoge_merge.exeを指定)
それ以外の引数にマージしたいexe、DLLファイル名を指定します。(この例ではhoge.exe、piyo.dll、foo.dllを指定)


### ワイルドカードでファイル名を指定する

引数に渡すファイル名をワイルドカードで指定したい場合は次のように /wildcards を追加します。

コマンドプロンプト ワイルドカードによるファイル名指定の ILMerge 実行例
"C:¥Program Files¥Microsoft¥ILMerge¥ILMerge" /wildcards /out:hoge_merge.exe hoge.exe *.dll

ちなみに /wildcards を指定せずに実行するとエラーになります。

コマンドプロンプト /wildcards を指定しないときの ILMerge 実行例(エラーになる)
"C:¥Program Files¥Microsoft¥ILMerge¥ILMerge" /out:hoge_merge.exe hoge.exe *.dll

実行結果

An exception occurred during merging:
ILMerge.Merge: Could not find the file '*.dll'.
   場所 ILMerging.ILMerge.Merge()
   場所 ILMerging.ILMerge.Main(String[] args)


## Visual C# でビルドしたあと自動的にマージされるようにする

いちいちコマンドラインで入力するのがぶっちゃけ面倒なので、
ビルドかけたときに自動でexeとDLLをマージしてくれるようにします。

Windowsアプリケーションを出力するプロジェクトのプロパティで、
「ビルド イベント」の「ビルド後に実行するコマンドライン」に
次の内容を追加するとビルド後にマージを行うようになります。
(コピペですぐ使えるはず)

ビルド後に実行するコマンドライン
set fname_new=$(TargetName)_merge$(TargetExt)
"C:¥Program Files¥Microsoft¥ILMerge¥ILMerge" /wildcards /out:%fname_new% $(TargetFileName) *.dll

説明不要かと思いますが、一応。(Visual C# がごにょごにょしてくれる)

  • $(TargetName) … アプリケーションのアセンブリ名
  • $(TargetExt) … 拡張子(.exe)
  • $(TargetFileName) … 出力される実行ファイル名

### 注意

次のようにマージ後のファイル名を元のファイル名にしてしまうと、デバッガが効かなくなります。

ビルド後に実行するコマンドライン
set fname_bk=$(TargetName)_bk$(TargetExt)
move $(TargetFileName) %fname_bk%
"C:¥Program Files¥Microsoft¥ILMerge¥ILMerge" /wildcards /out:$(TargetFileName) %fname_bk% *.dll

## 参考 - アプリケーションのEXEファイルやDLLファイルを1つにまとめるには? - @IT http://www.atmarkit.co.jp/fdotnet/dotnettips/426ilmerge/ilmerge.html
138
146
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
138
146

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?