在新的 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中文網其他相關文章!