正在为.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();
![](/Images/OutliningIndicators/None.gif)
if (lease.RenewOnCallTime.TotalMinutes < 5)//小于5分钟时,
lease.Renew(new TimeSpan(0, 5, 0));//增加5分钟//设置这个会锁住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,不允许你更新。我是这样做的
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
2。慎用增加远程对象生命期的操作.
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)