关于Assembly.Load("") 后释放加载的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