2012-09-20 6 views
0

새 Appdomain에로드 된 DLL도 기본 appdomain에로드되는 문제가 있습니다!언로드 후 AppDomain 및 DLL 사용시 문제가 발생했습니다.

MarshalByRefObject에서 가져온 "Servicebase"클래스가 있습니다.

이제이 하위 클래스에서 다른 하위 클래스를 상속받습니다.

이러한 하위 클래스는 자체 앱 도메인에 추가해야합니다.

이 나는이 코드를 수행

 AppDomainSetup setup = new AppDomainSetup(); 
     setup.ApplicationBase = Path.GetDirectoryName(dllFile); 
     setup.ApplicationName = Path.GetFileNameWithoutExtension(dllFile); 
     setup.LoaderOptimization = LoaderOptimization.MultiDomainHost; 
     setup.ShadowCopyFiles = "true"; 
     setup.ConfigurationFile = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile; 

     hostAppDomain = AppDomain.CreateDomain(setup.ApplicationName, AppDomain.CurrentDomain.Evidence, setup); 

이 작품은 ...

는 지금은이 코드 내 인스턴스를 생성 :

host = hostAppDomain.CreateInstanceFrom(dllFile, className.Split(',')[0]); 

난 지금의 AppDomain "로 검사 할 때 .CurrentDomain.GetAssemblies() "내 인스턴스 어셈블리가 내 주 어셈블리로로드되지 않습니다.

그러나이 exceuting 후

는 :

  var inst = (ServiceBase)host.Unwrap(); 

내 현재 어셈블리는 또한 DLL을로드.

아무도 내 이유를 말할 수 있습니까? 그리고 내가 뭘 할 수 있을까?

답변

0

ServiceBase는 파생 클래스가있는 동일한 어셈블리에 있습니까?

그렇다면 두 개의 다른 어셈블리로 분할해야합니다. 하나는 계약 (기본 클래스)이고 다른 하나는 파생 클래스입니다. 그런 다음 주 프로젝트에서 파생 클래스 어셈블리를 참조하지 않습니다. 계약 어셈블리 만 주 프로젝트에서 참조해야하며 기본 AppDomain에로드됩니다.