이것은 중복 된 것처럼 보일 수 있지만 사실은 다른 질문입니다!Assembly.Load (byte []) load once once
시나리오는 다음과 같습니다. 시스템에서 동적으로로드 된 모든 DLL을 반복 실행하여 데이터를 가져 오는 웹 앱이 있습니다. 이러한 dll은 웹 사이트의 사용자가 추가합니다. 여러 번로드 같은 DLL을 가지고,
pulic void GetNews(){
foreach(var i in ListOfDllPaths){
Assembly dll = Assembly.Load(File.ReadAllBytes(i));
SomeInterface if = CreateInstance(dll); //This methods does all the validation and such
if.DoMethod();
}
}
지금 문제가 그 GetNews()를 호출 할 때마다 같은 DLL을 모두 다시로드에 :
의사 코드는 다음과 같이 될 것이다. Assembly.LoadFrom 또는 LoadFile을 사용하여이 문제를 피할 수 있지만 삭제하고 싶을 수 있기 때문에 원하지 않는 파일을 잠글 수 있습니다.
또 다른 옵션은 새로운 앱 도메인을 사용하여로드하고 메소드를 호출하여 언로드 한 다음 해당 도메인에 인터페이스 dll을로드해야합니다.이 도메인은 실제로 경로를 모릅니다. 웹 응용 프로그램에서. 하나의 앱 도메인에서 다른 앱 도메인으로 데이터를 옮기는 것은 고통스럽고 달성하기가 너무 어렵습니다.
하나의 세 번째 옵션은 쉐도우 복사본을 사용하는 것이지만 그 다음 쉐도우 복사본을 삭제할 수는 없습니다.
옵션? 기본적으로 내가 필요로하는 것은 dll을로드하고, 사용하고, 언로드하고, 이동합니다. 당신이 정말로 그것을 언로드해야하는 경우
어쩌면 내가 여기있는 문제를 오해하고있다. 그러나 dll을로드하기를 원한다면 이미로드 한 파일 이름의 목록을 유지하고 매번 그 목록을 확인해야한다. 당신은 새로운 것들만로드합니까? – joshuahealy
제목을 편집했습니다. "[제목에"태그 "가 포함되어 있어야합니까?] (http://meta.stackexchange.com/questions/19190/)"합의가 "아니오, 그렇지 않아야한다"는 것을 참조하십시오. –
별도의 appdomain을 사용하여 언로드해야하는 경우 유일한 옵션입니다. – Yaur