正在为.net2.0下程序域加载程序集生更新dll而头痛

实现目的:动态加载dll,可以随时卸载并重新加载,运行运行期间可以替换这些dll。

在1.1下已运行良好的程序,到2.0下不行了,运行期间不允许更新dll。
找到一些地址

通过应用程序域AppDomain加载和卸载程序集之后,如何再返回原来的主程序域


微软的篇文章http://www.microsoft.com/china/msdn/library/langtool/vcsharp/csharp05162002.mspx 

Wayfarer's Prattle
http://www.cnblogs.com/wayfarer/archive/2004/09/29/47896.html


最后,终于通过上面的地址,特别是微软的例子(附带了一个不大相关示范程序)
原来直接使用添加的appDomain.CreateComInstanceFrom的对象在2.0下,相关的dll一样会被主进程锁住,需要利用一个Remote对象来加载。

此外,还要注意两点[后注:根本不是这回事,下面两点是错误的]
1。不要使用Activator.CreateComInstanceFrom(strintDllFilePath, stringClassName)来动态生成你的类的实例,在2.0下一样会锁住你的dll,不允许你更新。我是这样做的
System.Reflection.Assembly assembly = Assembly.Load(stringDllName);
object objBuild = assembly.CreateInstance(stringClassName);

2。慎用增加远程对象生命期的操作.
ILease lease = (ILease)this._remoteLoader.GetLifetimeService();

if (lease.RenewOnCallTime.TotalMinutes < 5)//小于5分钟时,
    lease.Renew(new TimeSpan(050));//增加5分钟//设置这个会锁住dll文件
posted @ 2007-09-23 22:27  生命体验之kevin-Y  阅读(787)  评论(0编辑  收藏  举报