正在为.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( 0 5 0 )); // 增加5分钟 // 设置这个会锁住dll文件

你可能感兴趣的:(.net)