2009-08-27 16 views
6

私は、コンポーネント/アセンブリをソースコードの観点から明確に分離しておきたいと思っていますが、同じdllでそれらをパッケージ化するために、状況によっては(おそらく拡張に関係しないかもしれません)必要があります。dllに複数の.NETアセンブリをパッケージ化する方法はありますか?

複数の.NETアセンブリを1つのDLLにパッケージ化することはできますか?もしそうなら、どのように?

可能であれば、それは良いアイデアだと思いますか?どうして?

答えて

9

チェックアウトこの記事は:あなたが知っているようにMerging .NET assemblies using ILMerge


、 オブジェクトコードの伝統的なリンクはもはや必要 .NETではありません。 .NETプログラムは、通常、 が複数の部分で構成されます。典型的な .NETアプリケーションは、 実行可能アセンブリ、いくつかのアセンブリ プログラムディレクトリ、およびグローバルアセンブリ キャッシュのいくつかの アセンブリで構成されます。プログラムが実行されると、 ランタイムはこれらすべての部分を プログラムに結合します。コンパイル時のリンクには、より長い時間がかかりません( )。

しかし、 のプログラムをすべて組み合せて使用すると、 のプログラムを1つの アセンブリにまとめて実行する必要があります。たとえば、プログラム すべてと必要なすべてのライブラリとすべての リソースを1つの.exeファイルに結合することによって、 で アプリケーションの展開を簡素化することができます。

csc /target:library /out:ClassLibrary1.dll ClassLibrary1.cs 
vbc /target:library /out:ClassLibrary2.dll ClassLibrary2.vb 
vbc /target:winexe /out:Program.exe 
    /reference:ClassLibrary1.dll,ClassLibrary2.dll Program.vb 

ilmerge /target:winexe /out:SelfContainedProgram.exe 
     Program.exe ClassLibrary1.dll ClassLibrary2.dll 
+0

しかし、これはDLL(?)ではなくEXEファイルを生成します。 –

+1

出力と同じものをdllで実行可能にする必要があります - 私は推測します... – JohnIdol

6

ILMergeは、2つのアセンブリを1つにマージできます。

詳細については、hereを参照してください(クロスランゲージ用の例ですが、どのようなツールでもアセンブリを作成できます)。

明らかに、個々のアセンブリ(プリマージ)の依存関係は更新/リダイレクトする必要があります。

関連する問題