0

事前にパッケージ化されたアセンブリを別のAppDomainに「ホット」ロードしたいのですが、エントリポイントクラスの名前やアセンブリファイルさえもわかりません。初期化ルーチンを実行できるように、このエントリポイントを見つける必要があります。

したがって、私が意図しているのは、すべてのファイルに対してReflectionOnlyLoadを実行し、特定の規則に従うファイルを見つけることです。注釈付き/特定のインターフェイスなどを実装します。

質問は、メインのAppDomainからReflectionOnlyLoadを何度も実行した場合、メモリリークが発生し始めるのでしょうか。これをメインのアプリドメインから実行できない場合、エントリポイントがどこにあるかわからないため、どのようなオプションがありますか。

また、ReflectionOnlyLoadを使用する際の微妙な点に関する追加情報もありがたいです。

4

3 に答える 3

3

私はお勧めしMono.Cecilます。これは、.netで使用できる単純なアセンブリです(Monoランタイムは必要ありません)。アセンブリをデータとしてロードするためのAPIを提供し、非常にうまく機能します。APIの操作は簡単で、リフレクションのみのロードを使用したときに発生した問題は発生しませんでした。

アセンブリリーダーを提供するMSによるオープンソースプロジェクトであるCCIを使用することもできます。

参照:CCIとMono.Cecil-長所と短所

于 2012-06-22T21:48:03.693 に答える
1

ReflectionOnlyLoad では問題は解決しません。ドキュメントを参照してください

新しい AppDomain でエントリ ポイントなどを見つけるためのコードを実行してみませんか?

于 2012-06-21T16:36:31.017 に答える
0

dll を介して反映できません。リフレクションのみの負荷でも、型はメインの AppDomain に固執します。

2 ソリューション:

  1. xml のどこかにエントリ ポイントを配置し、それを解析します。
  2. 2 段階の AppDomain を使用します。1 つはリフレクター用、もう 1 つは実際のオブジェクト用です。

一番わかりやすいので(1)を選びました。

(2) 実際のリモート オブジェクトにコマンドを発行するために、2 つの別個のプロキシを通過する必要があります。または、インターフェースを私が望むよりもはるかに密接に結合する必要があります。コーディングが面倒なことは言うまでもありません。

于 2012-06-22T15:58:13.643 に答える