2009-10-28 1 views

답변

7

필자가 보아온 가장 일반적인 시나리오는 주 프로그램과 다른 보안 모델로 확장 성을 제공 할 수 있다는 것입니다. 별도의 응용 프로그램 도메인에 플러그인을로드

두 가지 있습니다 :

  1. 당신이 버그가 있다면 당신은 응용 프로그램을 찢어에서 플러그인을 방지 할 수 있습니다보다 제한된 보안 모델
  2. 을 구현할 수를

AppDomains를 사용하면 어셈블리를로드하고 검사 할 수 있습니다. 별도의 AppDomain에서이 작업을 수행하면 별도의 어셈블리에서 정보를 수집하거나 코드를 실행 한 다음 프로세스 공간에서 전체 어셈블리를 언로드 할 수 있습니다. 조립품을 직접로드하면 언로드 할 수 없습니다. 이는 런타임에 유형을 새 버전으로 "업그레이드"할 수있게하려는 경우 (예 : 원격 어셈블리를로드 한 후 나중에 다시로드하려는 경우)에도 유용합니다.

+0

별도의 응용 프로그램 도메인에 버그가있는 플러그 인을로드하면 플러그 인이 응용 프로그램을 손상시키는 것을 막을 수 없습니다. 처리되지 않은 예외로 인해 응용 프로그램 도메인이 다운되어 결과적으로 전체 프로세스가 종료됩니다. –

+0

+1! oO! 좋은 정보 덩어리. –

+3

그것은 당신이 일하는 방식에 달려 있습니다. appdomain을 설정하여 프로세스를 무너 뜨리는 것이 아니라 프로세스를 무너 뜨릴 수 있습니다. http://msdn.microsoft.com/en-us/library/2bh4z9hs.aspx –

3

일반적인 예는 플러그인/추가 기능과 같은 경우입니다. 필요한 경우 DLL을 언로드 할 수있을뿐만 아니라 플러그인이 수행 할 수있는 작업을보다 효과적으로 제어 할 수 있습니다.

또한 다시 언로드 할 임시 어셈블리 (코드 생성)를 만드는 경우이를 수행하는 것이 좋습니다. (LCG는 "실제"어셈블리로 내보내는 데 필요한 전체 클래스를 구현하려는 경우에만 단일 메서드를 구현할 수 있습니다).

5

응용 프로그램 내에서 신뢰할 수 없거나 신뢰할 수 없거나 (플러그인과 같은) 제 3 자 구성 요소를 호스트해야하거나 언로드 할 수 있도록하려면 새 도메인을 만드는 것이 좋습니다.