.NET TIPS

アプリケーションのEXEファイルやDLLファイルを1つにまとめるには?

デジタルアドバンテージ 遠藤 孝信
2006/03/24

 外部のコンポーネント(通常はDLLファイル)などを利用して.NETでアプリケーションを作成する場合、アプリケーション本体(EXEファイル)の実行には当然ながらそれらのDLLファイルが必要になる。しかしアプリケーションをユーザーに配布する場合などでは、ファイルの数は少ない(できれば1つのEXEファイルのみの)方が扱いやすい。

 米Microsoftが無償で提供しているツール「ILMerge」を利用すれば、EXEファイルと、その実行に必要な複数のDLLファイルを1つのEXEファイルにまとめることが可能だ(正確には、ILMergeは複数のアセンブリを1つのアセンブリにマージする)。

複数のファイルを1つにまとめる「ILMerge」

 ILMergeは次のページからダウンロードできる。このページには.NET Framework 2.0用と1.1用のインストール・パッケージ(.msiファイル)が用意されている。

 また、ILMergeに関するより詳細な情報は次のページから参照することができる(これはILMergeの作者であるMichael Barnett氏のページである)。

 ダウンロードした.msiファイルを実行すると、デフォルトでは「C:\Program Files\Microsoft\ILMerge」に「ILMerge.exe」がインストールされる。

 ILMergeはコマンドラインから実行するコンソール・アプリケーションであるため、任意の場所から実行するにはインストールされたディレクトリを環境変数「PATH」に含めるか、PATHに設定されているディレクトリにILMerge.exeをコピーする必要がある(あるいは以下で紹介しているGUIツールを利用すればWindowsアプリケーションとして実行できる)。

ILMergeの基本的な使い方

 ILMergeにはいろいろなコマンドライン・オプションが用意されているが、基本的な使い方としてはコマンド・プロンプトから次のようにして実行する。

 この例では、1つのアプリケーションを構成する3つのファイル(MainApp.exe、ConponentA.dll、ComponentB.dll)を、MergedApp.exeにまとめようとしている。

C:\> ILMerge /out:MergedApp.exe MainApp.exe ComponentA.dll ComponentB.dll
ILMergeの実行例
この例では、MainApp.exeはConponentA.dllおよびComponentB.dllで実装されているクラスを使用しているものとする。/out:オプションは必須で、出力されるEXEファイルのファイル名を指定する。

 なお、/wildcardsオプションを指定すれば、ディレクトリ内のすべてのDLLファイルを「*.dll」により指定できる。また、ILMergeは複数のDLLファイルを1つのDLLファイルにまとめることもできる。詳しくはILMerge.exeと同時にインストールされるドキュメントを参照していただきたい。

ILMerge用GUIツール「Gilma」

 ILMergeはコンソール・アプリケーションであるが、オープンソースとして開発が進められているツール「Gilma」を利用すれば、Windowsアプリケーションとして実行できる。

 Gilmaは次のページからダウンロードできる*

* 本稿執筆時点では、Gilmaのインストール・パッケージである「SetupGilma.msi」は.NET Framework 1.1用であり2.0では実行できない。2.0でGilmaを利用するためには「Gilma-bin.zip」をダウンロードして、任意のディレクトリに展開すればよい。

 次の画面はGilmaによりファイルをマージしようとしているところだ。Gilma自体は「Gilma.exe」と「GilmaLogic.dll」の2つのファイルで構成されているが、ここではそれを1つのファイルまとめようとしている。


Gilmaの実行画面
ここではGilma.exeとGilmaLogic.dllの2つのファイルをGilma1.exeにまとめようとしている。
  インストールされているILMerge.exeのパス名。
  出力されるファイルのパス名。
  元のEXEファイルのパス名。
  EXEファイルの実行に必要なDLLファイルのパス名(複数指定可)。
  この[Merge]ボタンをクリックすればファイルのマージを開始する。

 ファイルのマージが成功すれば次のようなメッセージが表示される。ちなみにこのメッセージは、ILMergeを/logオプションを付けて実行した場合に表示されるメッセージである。


Gilmaの処理結果メッセージ
Gilmaは内部でILMergeを実行してファイルのマージを行う。このメッセージは/logオプション付きで実行されたILMergeが出力したメッセージ。

 この例の場合にはGilma1.exeが作成される。そしてこのEXEファイルは、DLLファイル(GilmaLogic.dll)なしで実行できる。End of Article

利用可能バージョン:.NET Framework 2.0のみ
カテゴリ:開発環境&ツール 処理対象:ツール

この記事と関連性の高い別の.NET TIPS
実行プログラムやライブラリ(DLLファイル)の依存関係を確認するには?
[ASP.NET]ページから生成されたソース・コードを見るには?
Windowsフォームで構成ファイルによりプロパティ値を設定するには?
アプリケーション設定を活用するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

@IT Special

- PR -

TechTargetジャパン

Insider.NET フォーラム 新着記事
  • Listから重複した要素を削除するには? (2017/3/29)
     Listから重複した要素を削除するには、Distinctメソッドを使う他、IEqualityComparerを使用する、Equalsメソッドをオーバーライドするなどの方法がある
  • Python Fire (2017/3/28)
     Python FireはPythonコードに対するコマンドラインインタフェースを自動生成するライブラリ。グーグルがオープンソースプロダクトとして公開している
  • Visual Studio 2017が目指す世界とは? (2017/3/24)
     Visual Studio 2017はもはやWindowsアプリ開発者のためだけのものではない。どんなアプリを開発できるのかを見てみよう
  • foreachループで現在の繰り返し回数を使うには? (2017/3/23)
     LINQのSelect拡張メソッドを使用して、foreachループの中で現在が何回目の繰り返しなのか、そのインデックスを得る方法を紹介する(C# 7/VB 15対応)
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

イベントカレンダー

PickUpイベント

- PR -

アクセスランキング

もっと見る

ホワイトペーパーTechTargetジャパン

注目のテーマ

Insider.NET 記事ランキング

本日 月間
ソリューションFLASH