如果我复制文件
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是字符串。没有在文件上打开其他流。
答案 0 :(得分:2)
源文件可能位于应用程序的程序集解析路径中,因此会自动加载。尝试制作src C:\Temp
或其他与您的应用程序文件夹无关的路径,并查看是否发生了同样的事情。