首頁 > 後端開發 > C++ > 如何將組件及其參考遞歸載入到單獨的 AppDomain 中?

如何將組件及其參考遞歸載入到單獨的 AppDomain 中?

Linda Hamilton
發布: 2025-01-15 12:16:48
原創
638 人瀏覽過

How to Recursively Load Assemblies and Their References into a Separate AppDomain?

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板