문제

하나 이상의 DLL을 동적으로 로드하여 기본 애플리케이션과 다른 보안 또는 기본 경로로 실행하고 싶습니다.이러한 DLL을 별도의 AppDomain에 로드하고 해당 DLL에서 개체를 인스턴스화하려면 어떻게 해야 합니까?

도움이 되었습니까?

해결책

더 구체적으로

AppDomain domain = AppDomain.CreateDomain("New domain name");
//Do other things to the domain like set the security policy

string pathToDll = @"C:\myDll.dll"; //Full path to dll you want to load
Type t = typeof(TypeIWantToLoad);
TypeIWantToLoad myObject = (TypeIWantToLoad)domain.CreateInstanceFromAndUnwrap(pathToDll, t.FullName);

모든 것이 제대로 진행되면(예외가 발생하지 않음) 이제 TypeIWantToLoad 인스턴스가 새 도메인에 로드됩니다.가지고 있는 인스턴스는 실제로 프록시이지만(실제 개체가 새 도메인에 있기 때문에) 일반 개체처럼 사용할 수 있습니다.

메모:내가 아는 한 TypeIWantToLoad는 MarshalByRefObject에서 상속해야 합니다.

다른 팁

3.5를 목표로 하고 있다면 새로운 기능을 활용할 수 있습니다. 관리형 확장성 프레임워크 당신을 위해 모든 무거운 짐을 처리할 수 있습니다.

당신은 사용할 수 있습니다 AppDomain.CreateInstance 이를 수행하는 방법.실제 개체를 가져오려면 반환되는 ObjectHandle의 Unwrap 메서드를 호출해야 합니다.

AppDomain.Create( ...를 사용하여 새 Appdomain을 만듭니다.).AppDomain을 생성한 후 해당 AppDomain에 DLL을 로드합니다.

Create*를 통해 Appdomain의 모든 메소드를 살펴보세요.CreateInstanceAndUnwrap 등과 같은 특정 항목이 있습니다.

앞서 설명한 대로 AppDomain.CreateDomain을 사용하여 새 앱 도메인을 만듭니다.그런 다음 Load 메서드를 사용하여 어셈블리를 로드하거나 ExecuteAssembly 메서드를 사용하여 어셈블리를 실행할 수도 있습니다.GetAssemblies를 사용하여 어셈블리가 이미 로드되었는지 확인할 수 있습니다.어셈블리를 로드한 후에는 언로드할 수 없다는 점에도 유의하십시오.도메인을 언로드해야 합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top