我正在使用
加载另一个程序集Assembly.LoadFrom("path.exe");
之后我似乎无法从文件系统中删除该exe。所以我想知道这条路径是否保持打开文件句柄以及如何关闭它?
答案 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主题。