在 AppDomain 中載入具有遞歸參考的組件
將組件載入到單獨的應用程式網域 (AppDomain) 時,也需要手動載入其參考。否則,由於缺少依賴項,可能會導致 FileNotFoundException 錯誤。
為了遞歸載入組件及其所有引用,建議:
<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>
使用 LoadFrom() 與 LoadFile() 載入組件
使用 LoadFrom() 載入組件將嘗試在 GAC 或目前 AppDomain 的 bin 資料夾中尋找組件。如果組件不在這兩個位置中的任何一個位置,則此操作可能會失敗。
相反,LoadFile() 從特定檔案路徑載入組件。此方法要求您手動載入所有相依性。但是,它可以更好地控製程序集載入過程。
依照上述步驟,可以將組件及其所有參考遞歸載入到單獨的 AppDomain 中,從而實現更隔離和受控的執行環境。
以上是如何將組件及其參考遞歸載入到單獨的 AppDomain 中?的詳細內容。更多資訊請關注PHP中文網其他相關文章!