Heim >Backend-Entwicklung >C++ >Wie lade ich Assemblys und ihre Referenzen rekursiv in eine neue 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!