アセンブリとそのすべての参照を新しい AppDomain に再帰的に読み込みます
アセンブリを新しい AppDomain に読み込み、そのすべての参照を再帰的に読み込むには、次の手順に従います。
1. AppDomain にプロキシ クラスを作成します:
<code class="language-csharp">public class Proxy : MarshalByRefObject { public Assembly GetAssembly(string assemblyPath) { try { return Assembly.LoadFile(assemblyPath); } catch (Exception ex) { // 记录异常信息以便调试 Console.WriteLine($"加载程序集失败: {ex.Message}"); return null; } } }</code>
2. AppDomain とドメイン プロキシを作成します:
<code class="language-csharp">AppDomainSetup domaininfo = new AppDomainSetup(); domaininfo.ApplicationBase = System.Environment.CurrentDirectory; Evidence adevidence = AppDomain.CurrentDomain.Evidence; AppDomain domain = AppDomain.CreateDomain("MyDomain", adevidence, domaininfo); Type type = typeof(Proxy); Proxy value = (Proxy)domain.CreateInstanceAndUnwrap( type.Assembly.FullName, type.FullName);</code>
3. ルート アセンブリをロードします:
<code class="language-csharp">string path = System.IO.Path.Combine(dir, "MyDll.dll"); Assembly assembly = value.GetAssembly(path);</code>
CreateInstanceAndUnwrap
メソッドを使用すると、プロキシ オブジェクトが新しい AppDomain で実行され、アセンブリとそのすべての依存関係が再帰的に読み込まれます。 質問で述べられている依存関係の解決の問題を回避するには、LoadFile
の代わりに LoadFrom
を使用する必要があることに注意してください。 改良されたコードには、アセンブリの読み込み中に発生する可能性のあるエラーをより適切に処理するための例外処理が含まれています。
以上が新しい AppDomain にアセンブリとその参照を再帰的に読み込む方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。