我用Assembly.Load()加载了一个自动生成的dll用于反射创建对象用完之后怎么释放这个dll,因为我在下次运行的时候要重新生成新的dll覆盖之前的,由于一直被占用导致新的dll无法生成各位有经验的大哥哥、大姐姐有什么好的办法能帮我解决这个问题.
解决方案 »
- 精通Entity框架的进下,找一个将整型转换成字符型数据的办法
- 数据库问题 请高手指点。
- 高手请速度来!!!关于异常处理
- 从一个窗口如何访问另一个窗口中的控件?
- winform中的datagridview 的一列绑定autocommpletesource 的问题.高手请进
- 用http下载,怎么在还没有下载下来之前判断文件的大小
- 内存释放问题????????考,不提供delete,郁闷,,,,
- 今天面试问C#中的泛型反射以及适用场景,之前没用过解答不出来,求帮助解答啊
- C# [重新登陆功能]与[X关闭]功能冲突,欲知详情,请点击我
- 请问为什么我用HTTP POSTER工具访问不了本地的API
- vs.net制作的安装程序,卸载功能不完全
- 如何加载ADODB???
首先需要定义一个类,里面封装好方法动态加载你要加载的程序集,并调用反射
然后利用域调用这个类
然后释放域
//定义用于动态释放的类
[Serializable]
class CanUnloadClass:MarshalByRefObject
{
public void DoSomething()
{
//动态加载程序集,并调用
}
} //调用的时候
#region 封装域,动态加载释放程序集
//创建一个域
AppDomain domain = AppDomain.CreateDomain("取个域的名字");
//利用这个域动态地加载类
CanUnloadClass obj = (CanUnloadClass)domain.CreateInstanceFromAndUnwrap("当前程序集路径", "加载到那个类的fullname");
//调用这个类,
obj.DoSomeThing();
//释放域,也就是释放了动态加载的程序集
AppDomain.Unload(domain);
#endregion
蒙谁呢?你可以把前一个版本的dll先拷贝到windows临时文件目录里,然后使用 Assembly.LoadFile 加载进来。.net完全可以在内存中有同一个dll的两个版本,豪不重复。比如说同样两个ABC类对象实例,可以一个是1.0.0.1来反射出来的的,另外一个是1.0.0.3反射出来的,好不冲突,而且这两个对象都是ABC类型,只不过ABC类型不等于ABC类型而已。
... 没蒙你
我Load那个dll后程序就一直占用着那个dll,而我的程序跑一遍是要重新生成那个dll的,生成dll的名字和目录肯定是一样的,名字一样的肯定就会去覆盖那个dll,而那个dll被占用是无法删除的(我试过手动删的)。
比如你的类是放在
Library1.dll程序集里,程序集在当前路径下,命名空间是MyName.CanUnloadClass
就写CanUnloadClass obj = (CanUnloadClass)domain.CreateInstanceFromAndUnwrap("Library1.dll", "MyName.CanUnloadClass");可以参考msdn
http://www.cnblogs.com/wayfarer/archive/2004/09/29/47896.html
在 System.Object.GetFieldInfo(String typeName, String fieldName)
在 System.Object.FieldGetter(String typeName, String fieldName, Object& val)
在 System.Object.FieldGetter(String typeName, String fieldName, Object& val)
在 System.RuntimeFieldHandle.GetValue(Object instance, RuntimeTypeHandle fieldType, RuntimeTypeHandle declaringType, Boolean& domainInitialized)
在 System.Reflection.RtFieldInfo.InternalGetValue(Object obj, Boolean doVisibilityCheck, Boolean doCheckConsistency)
在 System.Reflection.RtFieldInfo.GetValue(Object obj)
在 Microsoft.Office.Tools.Debugger.Tools.TryCreateDebuggerItem(MemberInfo member, Object target, __Item& item)
那个CanUnloadClass类有什么要注意的地方没,为什么我domain.CreateInstanceFromAndUnwrap("Library1.dll", "MyName.CanUnloadClass") 这个方法老返回不了东西。