2009-07-29 14 views
3

私は明らかにネイティブオブジェクトではないSkype4COMなどの参照DLLを含むクラスライブラリアプリケーションを構築していますので、ソリューションDLLをビルドした後でこのDLLをDLLに埋め込む方法を知りたい。別のDLLに1つのDLLを埋め込むC#

私はこのアプリケーションを開発する際に私が使用したdllを見たくないだけでなく、skype4com.dllでプロジェクトにインポートするのに苦労したくありません。

P.s:skype4com.dllを使用するために、それはCMDウィンドウを使用してWindowsに登録する必要があります。Regsvr32.exeたDllPathは

だから、エラーが発生したり、任意の回避策何かのためがあるん。

ありがとうございます。

よろしくお願いいたします。

答えて

4

あなたの依存関係を隠そうとするのは、これを行うには悪い理由です、IMO。他のものとは別に、あなたがコードを難読化しない限り、それはReflectorのようなツールでそれを逆コンパイルする人にはまだ見えるでしょう。

しかし、配備を簡単にするのがよい理由です。悪いことに、.NET 3.5のCOMオブジェクトでは、私が知っている限り、簡単に丸ごとインストールすることはできません。

すばらしいニュースは、C#4.0と.NET 4.0では、COMを使用したライブラリの展開をはるかに簡単にする代替アプローチがあることです。 リンク参照する代わりにPIAを使用すると、実際のCOMライブラリと使用する型/メンバにアクセスするには、の情報をコンパイラにアセンブリに埋め込むだけです。その後、PIAを出荷またはインストールする必要はありません。

.NET 4.0を待つことができれば、それはCOM PIAのためのアプローチですが、何か別にライブラリを別途出荷するだけです。他のものとは別に、あなたのライブラリを使用している開発者は、あなたが依存している同じクラスライブラリを既に使用しているかもしれません。 .NET 4.0を待つことができない(またはユーザーに展開させたくない)場合は、通常の方法でCOM PIAをインストールする必要があります。 ILMergeは、管理対象外のタイプのために動作しません。しかし

0

COMサーバーが機能しなくなることなく、in-proc COMサーバー(regsvr32で登録されるDLL)をクラスライブラリアセンブリに埋め込むことはできません。

regsvr32に登録すると、COMサーバーに実装されているCOMクラスがレジストリに公開されます。そのサーバーの後のコンシューマーは、COMサーバーが存在する場所を見つけて、そのサーバーをロードしてDllGetClassObject()関数を呼び出すために、レジストリを検索します。彼らがそれを行うことができなければ、彼らはCOMサーバを使用することができなくなります。私はあなたが埋め込みを行うことができないと確信して、このメカニズムの機能を保持します。

0

このリンクは... IL Merge

を助けるかもしれません。

+0

これは、非管理アセンブリではないことに注意してください – jeroenh

1

私はhereと答えるので、管理されていないアセンブリのオプションを含むFody.Costura nugetパッケージを使用することができます。

関連する問題