Assembly.LoadFrom是否保持打开文件句柄?

时间:2013-07-24 15:24:16

标签: c# reflection .net-assembly

我正在使用

加载另一个程序集
Assembly.LoadFrom("path.exe");

之后我似乎无法从文件系统中删除该exe。所以我想知道这条路径是否保持打开文件句柄以及如何关闭它?

2 个答案:

答案 0 :(得分:6)

是的,它是打开的,直到从appdomain卸载程序集。

如果确实需要删除该文件,请将其内容加载到内存中。使用Assembly.Load(byte[])加载程序集:

using (Stream stream = File.OpenRead("path.exe"))
{
    byte[] rawAssembly = new byte[stream.Length];
    stream.Read(rawAssembly, 0, (int)stream.Length);
    Assembly.Load(rawAssembly);
}

答案 1 :(得分:2)

默认情况下,文件将被锁定,但.NET有一个名为Shadow Copies的功能,它将在其中制作程序集的副本并加载它。 ASP.NET依赖于此功能来更新网站,而不会遇到这些锁定问题。

有关详细信息,请参阅MSDN上的此Shadow Copying Assemblies主题。