0

プラグインのリロードをサポートし、複数の AppDomains を使用しないプラグイン アーキテクチャを作成しました。dll が変更されたときにAssembly.Load(Byte[])メソッドを使用して新しいアセンブリを作成し、myAssembly.CreateInstance(type.FullName). それはすべてうまく機能します。ここで、プラグインがアセンブリを参照できるようにし、それらの参照をその場で変更できるようにしたいと考えました。私はAppdomain.AssemblyResolveイベントを実装しましたが、もちろん、プラグインの参照を一度ロードすることはできますが、参照された dll が変更されたときに再ロードすることはありません。

アセンブリからインスタンスを作成し、参照として使用する他のアセンブリを指定する方法はありますか?

小さなメモ: アプリ ドメインについては知っていますが、メモリ内にあるデータ (何 GB も) をシリアル化したくないため、それらを使用できません。

4

1 に答える 1

1

.NET は、修飾されたアセンブリ名に従って参照を見つけます。AssemblyResolve は、探しているアセンブリを .NET がまだ自動的に解決できない場合にのみ起動します (修飾名とロード コンテキストをロードされたアセンブリに一致させるか、プローブ パスからロードすることによって)。 )。

したがって、特定の参照型を既に解決している場合、または自動的に解決されている場合は、別の場所からそれをロードする機会はありません。また、特定の AppDomain の特定のコンテキストで読み込まれたアセンブリ (完全なアセンブリ名で識別される) はアンロードできないため、同じ AppDomain で参照されているアセンブリをアンロード/再ロードすることはできません。

于 2012-10-03T08:13:56.050 に答える