Code Bye

反射程序集后,再次加载提示文件被占用

大家好,最近想做个插件系统,主程序不停止,插件可以在线更新,决定采用下面的方法加载程序集

byte[] filedata = File.ReadAllBytes(“dll路径” );
Assembly ab = Assembly.Load(filedata);
使用这种方法加载后,再次调用此方法,在windows7 里没有异常,可是放到服务器 windows server 2008 里就提示:
The process cannot access the fileXXXXXXX because it is being used by another process.
折腾本人好几天了,还望各位大牛可以指点一下,不胜感激。

解决方案

10

File.ReadAllBytes(“dll路径” );————理论上来说,读取文件应该不会锁定dll文件,你在别的地方是不是还调用了写入?

70

byte[] 干什么?
更主要地,你两次加载同一个文件干什么?既然是某些类库重新更新了dll,那么就应该加载到其它文件、或其它目录的同名文件。
你可以参考 asp.net,它是支持运行时通过远程上传dll而动态更新的。它从来不会直接加载bin下面的文件,而是把这些文件拷贝到一个系统临时目录下,才会加载。这样到捕获到 bin 目录下的文件被修改、网站Domain需要重启时,原来的dll的内存影像不会立即停止(也不需要立即删除文件),但是新的dll文件还是可以从新的临时目录下被应用程序池的Domain所加载。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明反射程序集后,再次加载提示文件被占用