a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C# > 正文

c#動態加載卸載DLL的方法

2020-01-24 03:04:55
字體:
來源:轉載
供稿:網友

c#中通過反射可以方便的動態加載dll程序集,但是如果你需要對dll進行更新,卻發現.net類庫沒有提供卸載dll程序集的方法。在.net 中,加入了應用程序域的概念,應用程序域是可以卸載的。也就是說,如果需要對動態加載的dll程序集進行更新,可以通過以下方法解決:

新建一個應用程序域,在該應用程序域中動態加載DLL,然后可以卸載掉該應用程序域。該應用程序域被卸載的時候,相關資源也會被回收。

要想這樣實現,就要讓你程序的currentDomain和新建的newDomain之間進行通信,穿過應用程序域的邊界。從網上找到了某大牛的解決方法,抄下來留給自己看吧:

復制代碼 代碼如下:

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Reflection;
namespace UnloadDll
{
    class Program
    {
        static void Main(string[] args)
        {
            string callingDomainName = AppDomain.CurrentDomain.FriendlyName;//Thread.GetDomain().FriendlyName;
            Console.WriteLine(callingDomainName);
            AppDomain ad = AppDomain.CreateDomain("DLL Unload test");
            ProxyObject obj = (ProxyObject)ad.CreateInstanceFromAndUnwrap(@"UnloadDll.exe", "UnloadDll.ProxyObject");
            obj.LoadAssembly();
            obj.Invoke("TestDll.Class1", "Test", "It's a test");
            AppDomain.Unload(ad);
            obj = null;
            Console.ReadLine();
        }
    }
    class ProxyObject : MarshalByRefObject
    {
        Assembly assembly = null;
        public void LoadAssembly()
        {
            assembly = Assembly.LoadFile(@"TestDLL.dll");           
        }
        public bool Invoke(string fullClassName, string methodName, params Object[] args)
        {
            if(assembly == null)
                return false;
            Type tp = assembly.GetType(fullClassName);
            if (tp == null)
                return false;
            MethodInfo method = tp.GetMethod(methodName);
            if (method == null)
                return false;
            Object obj = Activator.CreateInstance(tp);
            method.Invoke(obj, args);
            return true;           
        }
    }
}

注意:

1. 要想讓一個對象能夠穿過AppDomain邊界,必須要繼承MarshalByRefObject類,否則無法被其他AppDomain使用。

2. 每個線程都有一個默認的AppDomain,可以通過Thread.GetDomain()來得到

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 欧美日本韩国一区二区三区 | 国产日产欧美a级毛片 | 欧美大片免费 | 欧美日韩视频一区二区三区 | 九九热视频在线 | 国产中文字幕在线 | 欧美一及黄色片 | 国产一区二区三区免费 | 天天摸夜夜摸爽爽狠狠婷婷97 | 91视频播放 | 最新日韩欧美 | 在线日韩| 日韩久久一区 | 精品国产乱码久久久久久牛牛 | 国产午夜精品一区二区三区嫩草 | 视频精品一区二区三区 | 久久精品视频免费 | 91精品国产99久久久 | 91精品国产综合久久久蜜臀图片 | 国产精品区二区三区日本 | 中文字幕av在线 | 国产视频黄在线观看 | 亚洲高清久久 | 自拍在线 | 国产视频网 | 国产精品一区二区三区麻豆 | 毛片av基地 | 亚洲伦理| 亚洲国产成人精品女人久久久 | 成人午夜网 | 日日干天天干 | 综合色婷婷一区二区亚洲欧美国产 | 九九色综合 | 久久一道本 | 日韩国产在线 | 91成人精品 | 国产精品中文字幕在线观看 | 日本a区 | 九九热在线观看 | 久久久久久网站 | 日韩大片 |