質問
私は CMS のモジュールに取り組んでいます。このモジュールはクラス ライブラリ DLL として配布されます。
このモジュールで使用したいユーティリティ ライブラリがいくつかあります。いずれにせよ、複数の DLL を配布する必要がないように、これらのライブラリを静的にリンクすることはできますか (これにより、ユーティリティ ライブラリを個別に配布することになります)。
DLLは1つだけにしておきたいと思います。
解決
ILMERGE を使用すると、多数の DLL をマージできます。
http://research.microsoft.com/~mbarnett/ILMerge.aspx
私自身は試していません。それが役に立てば幸い。
ここからダウンロード:
http://www.microsoft.com/downloads/details.aspx?familyid=22914587-B4AD-4EAE-87CF-B14AE6A939B0&displaylang=ja
簡単な説明 (ダウンロードページより)
ILMerge は、複数の .NET アセンブリを 1 つの .NET アセンブリにマージするためのユーティリティです。実行可能ファイルと DLL で同様に動作し、出力の処理と形式を制御するためのいくつかのオプションが付属しています。詳細については、付属のドキュメントを参照してください。
他のヒント
ILMerge を使用したくない場合は、このページを参照してください。
編集者のメモ:Jeffrey Richter は、DLL をリソースとして exe ファイルに入れるようアドバイスしています (追加する各 DLL ファイルのプロパティを表示し、「ビルド アクション」を「埋め込みリソース」に変更します。)。次に、実行可能ファイルを機能させるためにカスタム クラス ローダーが必要になります (実行時に、CLR は依存する DLL アセンブリを見つけることができず、これが問題となります。これを修正するには、アプリケーションの初期化時に、AppDomain の ResolveAssembly イベントにコールバック メソッドを登録します。).
必ず変更してください resourceName
実際のリソースを指す文字列。(例えば。変化 AssemblyLoadingAndReflection
プロジェクト名に変更します)。
これに対する簡単な答えは「ノー」です。コンパイル中に DLL にリンクすることはできません。これを行うための微妙な方法があるかどうかはわかりませんが、おそらく cms と一緒に dll を配布する必要があるでしょう。これを行う最善の方法は、ある種の再配布可能ファイルを作成することです。