Heim >Backend-Entwicklung >C++ >Wie lade ich Assemblys und ihre Referenzen rekursiv in eine neue AppDomain?

Wie lade ich Assemblys und ihre Referenzen rekursiv in eine neue AppDomain?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-15 12:07:44587Durchsuche

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

Laden Sie die Assembly und alle ihre Referenzen rekursiv in eine neue AppDomain

Um eine Assembly in eine neue AppDomain zu laden und alle ihre Referenzen rekursiv zu laden, führen Sie die folgenden Schritte aus:

1. Erstellen Sie eine Proxy-Klasse in 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 und Domain-Proxy erstellen:

<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. Stammassembly laden:

<code class="language-csharp">string path = System.IO.Path.Combine(dir, "MyDll.dll");

Assembly assembly = value.GetAssembly(path);</code>

Durch die Verwendung der CreateInstanceAndUnwrap-Methode wird das Proxy-Objekt in einer neuen AppDomain ausgeführt und die Assembly und alle ihre Abhängigkeiten werden rekursiv geladen. Beachten Sie, dass Sie LoadFile anstelle von LoadFrom verwenden müssen, um die in der Frage erwähnten Probleme bei der Abhängigkeitsauflösung zu vermeiden. Der verbesserte Code umfasst eine Ausnahmebehandlung, um Fehler, die beim Laden einer Assembly auftreten können, besser behandeln zu können.

Das obige ist der detaillierte Inhalt vonWie lade ich Assemblys und ihre Referenzen rekursiv in eine neue AppDomain?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn