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上的此“ 影像复制程序集”主题。