將組件和相依性載入到單獨的 AppDomain 中:遞歸方法
將具有複雜相依性的組件載入到新的 AppDomain 可能會帶來挑戰。 諸如「無法載入檔案或組件...或其依賴項之一」之類的錯誤經常發生,因為引用的組件不會自動載入。 這需要手動、遞歸載入過程。
解決方案涉及以下關鍵步驟:
AppDomain 建立: 首先,建立一個新的 AppDomain:
<code class="language-csharp"> AppDomainSetup setup = AppDomain.CurrentDomain.SetupInformation; setup.ApplicationBase = dir; AppDomain domain = AppDomain.CreateDomain("SomeAppDomain", null, setup);</code>
載入主元件: 使用其 AssemblyName
載入主元件:
<code class="language-csharp"> domain.Load(AssemblyName.GetAssemblyName(path));</code>
遞歸參考解析: 迭代新 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
類別促進 AppDomain 之間的通訊:
<code class="language-csharp"> class Proxy : MarshalByRefObject { public Assembly GetAssembly(string assemblyPath) { try { return Assembly.LoadFile(assemblyPath); } catch (Exception) { return null; } } }</code>
此方法確保所有必要的依賴項都會遞歸載入到目標 AppDomain 中,防止執行階段錯誤並實現成功的組件執行。
以上是如何將組件及其相依性遞歸載入到單獨的 AppDomain 中?的詳細內容。更多資訊請關注PHP中文網其他相關文章!