参照されている Dll をアセンブリにマージするILMerge
か、Dll をメイン アセンブリのリソースに組み込み、実行時にロードする必要があります。
どちらがパフォーマンスの点で優れているでしょう。どちらの場合も、最終実行可能ファイルは実行時に圧縮および解凍されます。
これは.NETです。とにかく「実行可能ファイル」は単なるバイトコードであり、実際のネイティブコードは、ランタイムがJITした後、一時フォルダーに隠されています。2 つの提案された方法のいずれかから、他の方法よりも顕著な違いが得られるとは思えません。
個別の DLL を配布することは、アセンブリ全体ではなくコンポーネントのみを置き換えるため、アプリケーションに変更を加えたい場合に便利です。
個人的には、アセンブリに dll を埋め込みません。これにより、再コンパイルなしでは扱いにくく、かさばる実行可能アセンブリが作成されます。dll をローカルで参照する方がはるかに優れており、それによってプログラムが高速化されます。