如何使用Assembly.Load锁定两个文件

时间:2012-01-24 22:13:51

标签: c#

如果我复制文件

File.Copy(src, dst);

然后加载副本

var asm = Assembly.LoadFile(dst);

为什么两个文件都被我的流程锁定了?

如果我在加载dst之前删除了src,然后将dst重新复制回src,我得到了我想要的最终结果。但删除和复制似乎有点不必要。

File.Copy(src, dst);
File.Delete(src);
var asm = Assembly.LoadFrom(dst);
File.Copy(dst, src);

是的我正在构建一个插件设计应用程序。是的我可以使用带有Shadow Copy的AppDomains(http://msdn.microsoft.com/en-us/library/ms404279.aspx)。是的,我将不得不管理自己的类型缓存(因为就我的AppDomain而言,每个程序集加载将提供不同的类型)。但这些都不是我问题的答案。

请注意,src和dst是字符串。没有在文件上打开其他流。

1 个答案:

答案 0 :(得分:2)

源文件可能位于应用程序的程序集解析路径中,因此会自动加载。尝试制作src C:\Temp或其他与您的应用程序文件夹无关的路径,并查看是否发生了同样的事情。