AppDomain での再帰参照を含むアセンブリの読み込み
アセンブリを別のアプリケーション ドメイン (AppDomain) に読み込む場合は、その参照も手動で読み込む必要があります。そうしないと、依存関係が欠落しているために FileNotFoundException エラーが発生する可能性があります。
アセンブリとそのすべての参照を再帰的に読み込むには、次のことをお勧めします。
<code class="language-C#">// 在当前 AppDomain 中创建一个代理类。 class Proxy : MarshalByRefObject { public Assembly GetAssembly(string assemblyPath) => Assembly.LoadFile(assemblyPath); } // 创建一个新的 AppDomain。 AppDomain domain = AppDomain.CreateDomain("MyDomain", null, domaininfo); // 在新的 AppDomain 中创建一个代理实例。 var value = (Proxy)domain.CreateInstanceAndUnwrap( typeof(Proxy).Assembly.FullName, typeof(Proxy).FullName); // 使用代理将程序集加载到新的 AppDomain 中。 var assembly = value.GetAssembly(assemblyPath); // 迭代程序集的引用并递归加载它们。 foreach (AssemblyName refAsmName in assembly.GetReferencedAssemblies()) { LoadAssemblyWithReferences(refAsmName, domain); }</code>
LoadFrom() と LoadFile() を使用してアセンブリをロードします
LoadFrom() を使用してアセンブリを読み込むと、GAC または現在の AppDomain の bin フォルダーでアセンブリを検索しようとします。アセンブリがこれらの場所のいずれにもない場合、この操作は失敗する可能性があります。
対照的に、LoadFile() は特定のファイル パスからアセンブリを読み込みます。この方法では、すべての依存関係を手動でロードする必要があります。ただし、アセンブリのロード プロセスをより詳細に制御できます。
上記の手順に従って、アセンブリとそのすべての参照を別の AppDomain に再帰的に読み込むことができ、より分離され制御された実行環境が可能になります。
以上がアセンブリとその参照を別の AppDomain に再帰的に読み込む方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。