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

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

Linda Hamilton
Linda HamiltonOriginal
2025-01-15 12:16:48641Durchsuche

How to Recursively Load Assemblies and Their References into a Separate AppDomain?

Laden einer Assembly mit rekursiven Referenzen in AppDomain

Wenn Sie eine Assembly in eine separate Anwendungsdomäne (AppDomain) laden, müssen Sie auch deren Referenzen manuell laden. Andernfalls kann es aufgrund fehlender Abhängigkeiten zu einem FileNotFoundException-Fehler kommen.

Um eine Assembly und alle ihre Referenzen rekursiv zu laden, wird Folgendes empfohlen:

<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>

Verwenden Sie LoadFrom() und LoadFile(), um die Assembly zu laden

Beim Laden einer Assembly mit LoadFrom() wird versucht, die Assembly im GAC oder im bin-Ordner der aktuellen AppDomain zu finden. Dieser Vorgang schlägt möglicherweise fehl, wenn sich die Baugruppe nicht an einem dieser Speicherorte befindet.

Im Gegensatz dazu lädt LoadFile() eine Assembly aus einem bestimmten Dateipfad. Bei dieser Methode müssen Sie alle Abhängigkeiten manuell laden. Es bietet jedoch eine bessere Kontrolle über den Baugruppenladevorgang.

Nach den oben genannten Schritten können die Assembly und alle ihre Referenzen rekursiv in eine separate AppDomain geladen werden, was eine isoliertere und kontrollierte Ausführungsumgebung ermöglicht.

Das obige ist der detaillierte Inhalt vonWie lade ich Assemblys und ihre Referenzen rekursiv in eine separate 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