본문 바로가기

.NET/CLR

Assembly Loader

Assembly Loader란 CLR에서 .NET Assembly를 로드하기 위한 메카니즘을 말한다.

그럼 Assembly Loader는 어떻게 Assembly를 찾아 로드할까 ...

먼저 로드 프로세스부터 함 보자.


위의 프레세스를 보면  Assembly Binding 요청이 일어날 경우 어떤 Load Context를 불러 들일까 결정하게 된다. 그리고 그 Load Context가 결정 되면 그 안에 정보로 Assembly를 로드하게 된다.

그럼 로드 컨텍스트의 종류는 뭐가 있을 까.

3가지로 말할수 있는다  다음과 같다.

1. Default Load Context
  -이 컨텐스트로 로드가 결정된 넘들은 Assembly.Load로 로드된다. 모든 GAC영역의 Assembly 그리고 대부분의 Assembly들이 Default Load Context로 로드된다.  이 컨텐츠스로 로드하게 되면 가장안전하게 어셈블리의 충돌과 복잡성을 생성하는것을 방지한다. 이 컨텍스트는 Assembly 로드 리퀘스트가 왔을다 다음과 같은 입증? 절차를 가지게 된다.
 


위의 프로세스를 살펴보자 . 로드 리퀘스트가 들어오면 먼저 CLR Loader는 GAC에서 Assembly가 있는지 찾는다 만약 있으면 리퀘스트된 Assembly를 로드하게 된다. 만약 GAC에 있지아니하면 CLR Loader는 위에서 보듯이 다른 과정의 절차를 수행하게 된다. ㅋㅋ(대충넘김)

2. Load-from Context
  -  이컨텍스트로 로드가 결제된 넘들은  Assembly.LoadFrom, AppDomain.CreateInstanceFram, AppDomain.ExecuteAssembly ApI를 사용해 로드하게 된는데 로드 입증? 절차는 아래와 같다.


3. Load-without Context
  - 이 컨텍스트는 load context를 가지지 않는 assembly를 로드하기 위한 context다. 예를 들면 Reflection 네임스페이스에 있는 Emit API들이다.  이 컨텍스트의 경우는 다른 컨텐스트처럼 입증? 절차를 수행하지 않는다.


냠냠 이렇게 해서 간단하게 3가지 Load Context를 살펴보았다.