我加載使用Assembly.LoadFrom保持一個打開的文件句柄?
Assembly.LoadFrom("path.exe");
另一組裝之後,我似乎無法刪除的文件系統的exe。所以我想知道如果這個路徑保持一個打開的文件句柄,我怎麼能關閉它?
我加載使用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有一個稱爲卷影副本功能,在它將使組件的副本,並將其加載代替。 ASP.NET依靠此來使網站能夠更新而不會遇到這些鎖定問題。
有關詳細信息,請參閱MSDN上的Shadow Copying Assemblies主題。
刪除* *當*?當你的程序結束或者它仍在運行時? – m0skit0
@ m0skit0:它仍在運行時。當我知道我不再需要這個裝配中的任何東西時。 – clamp