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

如何在新的 AppDomain 中遞歸載入組件及其參考?

Mary-Kate Olsen
發布: 2025-01-15 12:07:44
原創
587 人瀏覽過

How to Recursively Load Assemblies and Their References in a New AppDomain?

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

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