CLR(COM服務器)
CLR作為一個COM服務器實現在MSCorWks.dll文件中。安裝.NET Framework時,表示 CLR的COM服務器被注冊到Windows的注冊表裡。
MSCorEE.dll(墊片)
MSCorEE.dll的職責是判 斷創建何種版本的CLR。 非托管應用程序宿主調用MSCorEE.dll(shim)中CorBindToRuntimeEx函數或者另一個 相似的函數來創建CLR COM的實例。
一台機器可以安裝多個版本的CLR,但在機器中只 有一個版本的MSCorEE.dll文件。
以上兩者之間的關系如下代碼所示(c++): MSCorEE.dll(墊片)---->CLR(COM服務器)
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->#include <Windows.h> #include <MSCorEE.h> #include <stdio.h> #pragma comment(lib,"mscoree.lib") int main(int argc, CHAR* argv[]) { ICLRRuntimeHost *pClrHost; //調用<MSCorEE.h>中的CorBindToRuntimeEx()生成COM服務器 HRESULT hr= CorBindToRuntimeEx(NULL, NULL, NULL, CLSID_CLRRuntimeHost, IID_ICLRRuntimeHost, (LPVOID*)&pClrHost); //啟動clr pClrHost->Start(); //............................其他操作 //終止clr pClrHost->Stop(); getchar(); return 0; }
應用程序域(AppDomain)
一個應用程序域是一組程序集的一個容器。應用 程序域的全部目的就是提供隔離性。
上圖為一個單獨的Windows進程,該進程中運行著一個CLR COM服務器。該CLR中每個應用程序域都有自己的 加載器堆。(系統域,共享域,默認域#1,其他域#2)
一些特殊的程序集如MSCorLib.dll,它需要被 所有的應用程序域共享,那麼他就以一種對應用程序域保持中立的方式被加載,由CLR維護一個特殊的加載器 堆。