Heim >Backend-Entwicklung >C++ >Wie lade ich Assemblys und ihre Abhängigkeiten rekursiv in eine separate AppDomain?
Assemblys und Abhängigkeiten in eine separate AppDomain laden: Ein rekursiver Ansatz
Das Laden von Assemblys mit komplexen Abhängigkeiten in eine neue AppDomain kann eine Herausforderung darstellen. Fehler wie „Datei oder Assembly … oder eine ihrer Abhängigkeiten konnte nicht geladen werden“ treten häufig auf, weil referenzierte Assemblys nicht automatisch geladen werden. Dies erfordert einen manuellen, rekursiven Ladevorgang.
Die Lösung umfasst diese wichtigen Schritte:
AppDomain-Erstellung: Erstellen Sie zunächst eine neue AppDomain:
<code class="language-csharp"> AppDomainSetup setup = AppDomain.CurrentDomain.SetupInformation; setup.ApplicationBase = dir; AppDomain domain = AppDomain.CreateDomain("SomeAppDomain", null, setup);</code>
Laden der Hauptbaugruppe: Laden Sie die Primärbaugruppe mit ihrem AssemblyName
:
<code class="language-csharp"> domain.Load(AssemblyName.GetAssemblyName(path));</code>
Rekursive Referenzauflösung: Durchlaufen Sie die Referenzen der geladenen Assembly innerhalb der neuen AppDomain:
<code class="language-csharp"> foreach (AssemblyName refAsmName in Assembly.ReflectionOnlyLoadFrom(path).GetReferencedAssemblies()) { // Utilize a proxy object for cross-AppDomain access Type type = typeof(Proxy); var value = (Proxy)domain.CreateInstanceAndUnwrap(type.Assembly.FullName, type.FullName); // Load the referenced assembly in the target AppDomain value.GetAssembly(refAsmName.FullName); }</code>
Proxy-Klasse für domänenübergreifende Interaktion: Die Proxy
-Klasse erleichtert die Kommunikation zwischen AppDomains:
<code class="language-csharp"> class Proxy : MarshalByRefObject { public Assembly GetAssembly(string assemblyPath) { try { return Assembly.LoadFile(assemblyPath); } catch (Exception) { return null; } } }</code>
Diese Methode stellt sicher, dass alle erforderlichen Abhängigkeiten rekursiv in die Ziel-AppDomain geladen werden, wodurch Laufzeitfehler verhindert und eine erfolgreiche Assembly-Ausführung ermöglicht wird.
Das obige ist der detaillierte Inhalt vonWie lade ich Assemblys und ihre Abhängigkeiten rekursiv in eine separate AppDomain?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!