ホームページ >バックエンド開発 >C++ >新しい AppDomain にアセンブリとその参照を再帰的に読み込む方法は?

新しい AppDomain にアセンブリとその参照を再帰的に読み込む方法は?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-15 12:07:44587ブラウズ

How to Recursively Load Assemblies and Their References in a New AppDomain?

アセンブリとそのすべての参照を新しい 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。