你的位置:首页 > 软件开发 > ASP.net > c#动态加载卸载DLL的方法

c#动态加载卸载DLL的方法

发布时间:2016-06-17 19:00:05
这篇文章介绍了c#动态加载卸载DLL的方法,有需要的朋友可以参考一下c#中通过反射可以方便的动态加载dll程序集,但是如果你需要对dll进行更新,却发现.net类库没有提供卸载dll程序集的方法。在.net 中,加入了应用程序域的概念,应用程序域是可以卸载的。也就是说,如果需要对 ...

这篇文章介绍了c#动态加载卸载DLL的方法,有需要的朋友可以参考一下

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(get='_blank'>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;          }   } /* 何问起 hovertree.com */} 

原标题:c#动态加载卸载DLL的方法

关键词:C#

C#
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录