2

AppDomain.CreateInstanceAndUnwrap メソッドの MSDN ドキュメントでは、メモとして記載されています

CreateInstanceAndUnwrap によって返された T1 型のオブジェクトのメソッド M に対して事前バインド呼び出しを行い、そのメソッドが現在のアセンブリ C 以外のアセンブリ C 内の T2 型のオブジェクトのメソッドに対して事前バインド呼び出しを行う場合、アセンブリまたは T1 を含むアセンブリ、アセンブリ C が現在のアプリケーション ドメインに読み込まれます。この読み込みは、T1.M() への早期バインド呼び出しが DynamicMethod の本体またはその他の動的に生成されたコードで行われた場合でも発生します。現在のドメインが既定のドメインである場合、プロセスが終了するまでアセンブリ C をアンロードできません。現在のドメインが後でアセンブリ C を読み込もうとすると、読み込みが失敗する可能性があります。

(http://msdn.microsoft.com/en-us/library/3c4f1xde.aspx)

上記の注記について技術的な説明がある人はいますか? これはなぜですか?オブジェクトでメソッドが最初に呼び出されたときに、アセンブリの依存関係の検索が行われますか?

4

1 に答える 1

3

アセンブリの依存関係は、オブジェクトのインスタンスを作成するときに呼び出されます。

仮説シナリオを分析してみましょう。Lib1 と Lib2 の 2 つの DLL があります。(Lib1 は Lib2 のメソッドを使用します)。

私たちのアプリケーションでは、main メソッドは次のようになります。

Worker localWorker = new Worker();
localWorker.PrintDomain();

AppDomain ad = AppDomain.CreateDomain("New domain");
Worker remoteWorker = (Worker)ad.CreateInstanceAndUnwrap("Lib1","Lib1.Worker");
remoteWorker.PrintDomain();

アセンブリの依存関係がインラインでチェックされています:

Worker remoteWorker = (Worker)ad.CreateInstanceAndUnwrap("Lib1","Lib1.Worker");

たとえば、Lib2.dll が存在しない場合、例外が発生します。

于 2011-10-25T12:01:39.437 に答える