【C#】DLLをEXEの中に同梱させてしまう方法


アプリケーションを開発しているとライブラリを利用する機会が多いですよね。
で、DLLを利用した開発も多いかと思いますが、ちょっと規模の大きな開発になるとリンクするDLLの数が多くなりますよね。

私も先日開発したアプリケーションで15個くらいのDLLを使うアプリケーションを作ったのですが、メインのEXEファイルがフォルダ内に埋もれてしまい、ユーザーにEXEを探してもらう作業が必要になってしまいました。

今回は、そんなDLLをEXEにひとまとめにしてしまう方法(ILMerge)を勉強したので紹介します。

 

まずILMergeですが、これはMicrosoftが無償で提供しているツールになります。(ダウンロードは←のリンク先です)
コマンドラインベースで操作し、ライブラリと実行ファイルを実行ファイルにひとまとめににすることができます。
全てのDLLをまとめることも、特定のDLLだけを組み込むこともできます。
なので、複数の実行ファイルからリンクするDLLは残し、1つの実行ファイルからしかリンクしないDLLは全てこの実行ファイルに同梱してしまうとフォルダ内がスッキリします。

【使い方】

まずは、こちらからインストーラをダウンロードしてインストールします。

使い方はコマンドプロンプトでコマンドを入力して使用します。
基本的なコマンドは次のような感じ。

"C:\Program Files (x86)\Microsoft\ILMerge\ILMerge.exe" /out:out.exe in.exe tmp1.dll tmp2.dll

1つ目はILMerge.exeのパス、2つ目は出力オプションと出力ファイル名、3つ目はベースとなるexeファイル名、以降はマージするdllファイル名を入力します。
これを実行すると、コマンドを実行したディレクトリ上にマージされたout.exeが出力されます。

ワイルドカードでマージするdllを指定することもできます。
これだと一つ一つdllを入力するのではなく、一回のコマンドでマージすることができます。

"C:\Program Files (x86)\Microsoft\ILMerge\ILMerge.exe" /wildcards /out:out.exe in.exe *.dll

ワイルドカードを使用する場合は、必ずwildcardsオプションを付加する必要があります。
これを指定しないとエラーになるのでご注意ください。

 

【Visual Studioでの使い方】

ビルドした後で毎回コマンドを実行するのは面倒ですよね。
Visual Studioでの開発では、ビルドの際にビルドイベントを設定することができます。
なので、ビルド後イベントに上記のコマンドを設定しておくことでビルドとマージを一気に片付けることができます。

その際のポイントがあります。
マージする前に一度ファイルをリネームしておくことです。

ren in.exe tmp.exe

というような感じで実行することができます。
これは、出力後のファイルをビルドしたexeのファイル名と同じようにするためです。

あと、リリースしやすいようにdelコマンドでマージに使ったdllファイルも削除しておくと便利ですよ。

del /Q *dll

これでビルドと同時にDLLをマージすることができるようになりました。
EXEファイルがDLLに埋もれることもなくなりました。

世の中便利なものもあるものですねー。


この記事をシェアする

    Mask_Siva

    北の試される大地に生息しているSEです。
    楽しみながらプログラムを作ったり、ゲームで遊んだりしています。

    コメントをお待ちしております

    HTMLタグは利用できません

    Advertising



    新品/中古ゲーム販売 通販ショップの駿河屋

    Twitter

    仮面被り過ぎ@コンプレックス大佐
    @Mask_Siva

    • 大丈夫。 まだ14時間もあるじゃないか。 6時間作業に使ってもお釣りがくるだろ? と言い聞かす。
      about 10時間 ago
    • 第2タスク消化完了 あと1つだけど、これが本丸 ちなみにそれが終わったらシャドウボクシングが待ってるんよ、、、
      about 10時間 ago
    • 1つ目終了! 2つ目は夜にならないと回収できない。 3つ目は時間との勝負。 今日明日は頑張って、明後日少し休むぞ!
      about 13時間 ago

    BGM

    イグジスト (アニメ盤) - EP
    2 暗夜航路 -angela

    ↓の再生ボタンで再生できます
    色々な楽曲を試聴したいなら
    >>>こちら<<<

    Nico Nico Community

    Calendar

    2021年4月
     123
    45678910
    11121314151617
    18192021222324
    252627282930 

    Archive

    My WIsh List

    Amazonで気になっている物をまとめています。

    「これは良かった!」「こっちの方がいいよ!」というものがあれば、教えてください<(_ _)>

    https://amzn.to/3oof0rZ