Assembly.LoadFrom是否保持打开文件句柄?
我正在使用加载另一个程序集
Assembly.LoadFrom("path.exe");
之后我似乎无法从文件系统中删除该exe。 所以我想知道这条路径是否保持打开文件句柄以及如何关闭它?
是的,它是打开的,直到从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); }
默认情况下,文件将被锁定,但.NET有一个名为Shadow Copies的function,它将在其中制作程序集的副本并加载它。 ASP.NET依赖于此function来更新网站,而不会遇到这些锁定问题。
有关详细信息,请参阅MSDN上的此“ 影像复制程序集”主题。