잠겨 얻을 원인 내 응용 프로그램이 솔루션 패키지 폴더의 메모리에 DLL을로드했기 때문에 그렇게합니다. 이 하나 개의 파일 내 응용 프로그램에서 '사용'점점 끝나기 때문에 는 nuget 패키지 DLL이 나는 다음과 같은 코드를 실행하고
는 특히 Microsoft.Bcl.Build.Tasks.dll, 내 응용 프로그램은 응용 프로그램을 닫을 때까지 임시 디렉토리를 삭제할 수 없습니다.
치킨 앤 에그 - 폴더가 없어 질 때까지 응용 프로그램을 닫고 싶지 않습니다. 응용 프로그램이 닫힐 때까지는 폴더를 삭제할 수 없습니다.
누구나 작동하는 것으로 알려진 해결책이 있습니까?
예 :
일단 DLL이 응용 프로그램에로드되면 영구적이며 이전에 릴리스 될 수 없다는 것을 알고 있습니다.
그러나 과거에는 응용 프로그램 내에서 추가 AppDomains를 만든 다음 기본 응용 프로그램 대신 AppDomains에 어셈블리를로드 할 수 있다고 들었습니다. 그런 다음 AppDomain 및 관련 참조/어셈블리를 처리 할 수 있으며 기대하고 있습니다. 핸들?
참고 - 위의 Nuget 패키지 복원을 호출하고 있지만 코드를 단계적으로 실행하면 확실히 잠금이 빌드 단계에서 발생하며 누겟 복원에서는 수행되지 않는다고 말할 수 있습니다.
불행하게도 그 문제가 해결되지 않았다. 이 문제는 BuildManager 클래스에 그다지 국한되지 않습니다. 호스트 응용 프로그램에로드되지만 언로드되지 않는 DLL의 기술적 인 측면과 관련이 있습니다. C# dll을 언로드하는 것을 방해합니다. 이로 인해이 Microsoft BCL dll이 잠기는 것에 대처하는 것이 거의 불가능합니다. – Baaleos
그냥 아이디어지만 별도의 AppDomain이 트릭을 수행해야합니다. 기본적으로 모든 것을로드하고 완료 할 때 파괴 할 수 있습니다! –
불행히도 너무 작동하지 않았다. - 나는 전체 빌드를 실행하고 프록시 도메인 내에서 프로세스를 실행하려고 시도했다. dll이 실제 참조/assembly.load() 대신 프로젝트/대상 가져 오기로 csproj에 의해로드되기 때문에 생각합니다. – Baaleos