2013-07-24 2 views
3

나는Assembly.LoadFrom은 열린 파일 핸들을 유지합니까?

Assembly.LoadFrom("path.exe"); 

를 사용하여 다른 어셈블리를로드하고 그 후 나는 파일 시스템에서 해당 EXE 파일을 삭제하는 것 캔트. 그래서이 경로가 열린 파일 핸들을 유지하고 그것을 닫을 수 있는지 궁금 해서요?

+0

삭제할 때 * *? 프로그램이 끝났거나 실행 중일 때? – m0skit0

+0

@ m0skit0 : 아직 실행 중일 때. 내가이 집회에서 더 이상 필요한 것이 없을 때. – clamp

답변

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); 
} 
+0

감사합니다. 어떻게 언로드합니까? – clamp

+0

및 또 다른 질문 : 같은 어셈블리를 두 번로드 할 경우 다른 파일 핸들을 열거 나 첫 번째 어셈블리를 다시 사용합니까? – clamp

+0

전체 appdomain을 언로드하지 않고 언로드 할 수 있습니다. 'AppDomain.Unload()'와 함께. –

2

, 파일이 잠금 상태가됩니다,하지만 .NET은 어셈블리의 복사본을 만들어 대신에로드됩니다있는 섀도 복사본라는 특징을 갖고있다. ASP.NET은 이러한 잠금 문제를 겪지 않고 웹 사이트를 업데이트 할 수 있도록이 기능을 사용합니다.

자세한 내용은 MSDN의 Shadow Copying Assemblies 항목을 참조하십시오.

관련 문제