关于Assembly.Load("") 后释放加载的dll,解决思路
关于Assembly.Load("") 后释放加载的dll,急急急!!!
我用Assembly.Load()加载了一个自动生成的dll用于反射创建对象
用完之后怎么释放这个dll,因为我在下次运行的时候要重新生成新的dll覆盖之前的,由于一直被占用导致新的dll无法生成
各位有经验的大哥哥、大姐姐有什么好的办法能帮我解决这个问题.
------解决方案--------------------
程序集需要加载在域里才能动态释放
首先需要定义一个类,里面封装好方法动态加载你要加载的程序集,并调用反射
然后利用域调用这个类
然后释放域
我用Assembly.Load()加载了一个自动生成的dll用于反射创建对象
用完之后怎么释放这个dll,因为我在下次运行的时候要重新生成新的dll覆盖之前的,由于一直被占用导致新的dll无法生成
各位有经验的大哥哥、大姐姐有什么好的办法能帮我解决这个问题.
------解决方案--------------------
程序集需要加载在域里才能动态释放
首先需要定义一个类,里面封装好方法动态加载你要加载的程序集,并调用反射
然后利用域调用这个类
然后释放域
- C# code
//定义用于动态释放的类 [Serializable] class CanUnloadClass:MarshalByRefObject { public void DoSomething() { //动态加载程序集,并调用 } } //调用的时候 #region 封装域,动态加载释放程序集 //创建一个域 AppDomain domain = AppDomain.CreateDomain("取个域的名字"); //利用这个域动态地加载类 CanUnloadClass obj = (CanUnloadClass)domain.CreateInstanceFromAndUnwrap("当前程序集路径", "加载到那个类的fullname"); //调用这个类, obj.DoSomeThing(); //释放域,也就是释放了动态加载的程序集 AppDomain.Unload(domain); #endregion
------解决方案--------------------
------解决方案--------------------
就是程序集名称,
比如你的类是放在
Library1.dll程序集里,程序集在当前路径下,命名空间是MyName.CanUnloadClass
就写
CanUnloadClass obj = (CanUnloadClass)domain.CreateInstanceFromAndUnwrap("Library1.dll", "MyName.CanUnloadClass");
可以参考msdn
------解决方案--------------------
参考:
通过应用程序域AppDomain加载和卸载程序集
http://www.cnblogs.com/wayfarer/archive/2004/09/29/47896.html