首页 新闻 会员 周边

动态加载DLL,对DLL再次编译,提示“另一个程序正在使用此文件”

0
悬赏园豆:5 [已解决问题] 解决于 2010-11-05 16:42

在线编译了一个dll,用Assembly.LoadFile(path)动态加载dll后,在线再次编译此dll,提示“另一个程序正在使用此文件”,怎么去释放,使得可以再次编辑dll...

天下一笨蛋的主页 天下一笨蛋 | 初学一级 | 园豆:197
提问于:2010-11-02 15:35
< >
分享
最佳答案
0

放到appdomain一定可以用的,你去网上找一下,我以前开发过

收获园豆:3
天神一 | 小虾三级 |园豆:845 | 2010-11-02 17:58
看看这个文章http://www.csharpwin.com/csharpspace/10994r8596.shtml
天神一 | 园豆:845 (小虾三级) | 2010-11-03 09:09
网上关于appdomain的就那么两篇文章,有一篇好像还有一个问题没有解决的,郁闷死,有什么好点的资料啊?
萧鼎 | 园豆:106 (初学一级) | 2010-11-03 15:10
其他回答(3)
0

加载了就先卸载后,再编译就行。

HUHU慈悲 | 园豆:9973 (大侠五级) | 2010-11-02 15:44
0

最好把assembly放到appdomain里面去,因为assembly没有卸载功能,只有程序停止后才能释放。appdomain提供Unload方法,使用完dll后通过卸载appdomain来释放dll。

收获园豆:2
萧鼎 | 园豆:106 (初学一级) | 2010-11-02 16:19
这个方法我也试过,但没用啊!你是否试过,有没有什么需要注意的地方
支持(0) 反对(0) 天下一笨蛋 | 园豆:197 (初学一级) | 2010-11-02 17:28
我最近刚在学这个,写了代码,因为宿主用的是windows服务,好像代码里面有错误,windows服务不能调试,郁闷死,正着错误当中,有兴趣一起帮忙下,我的问题http://space.cnblogs.com/q/19559/
支持(0) 反对(0) 萧鼎 | 园豆:106 (初学一级) | 2010-11-03 15:07
0

兄台怎么解决这个问题的,可否告之一下。

现在一加载就删除不掉,也替换不了。

stoneniqiu | 园豆:80 (初学一级) | 2014-08-22 08:53

我的做法有点纠结,动态编译dll,路径不是直接设置在bin里面,而是临时的文件夹,比如TaskBin,然后把bin里面的dll文件删除掉,再移动TaskBin里面的dll文件到bin文件夹,接着把TaskBin里面,动态生成dll所产生的pdb文件删除,最后再去加载bin文件夹里面的dll文件。

/// <summary>
/// 刷新任务编译文件DLL
/// </summary>
/// <param name="path"></param>
private void RefreshTaskFile(string path)
{
File.Delete(path.Replace("TaskBin", "bin"));
File.Copy(path, path.Replace("TaskBin", "bin"), true);
File.Delete(path.Replace("dll", "pdb"));
}

支持(0) 反对(0) 天下一笨蛋 | 园豆:197 (初学一级) | 2015-05-25 16:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册