當運行Windows應用程序的時候,CLR總是默默地為服務著。CLR到底是如何被加載並運行呢?
首先,Microsoft專門為CLR定義了一個標准的COM接口。
安裝某個版本的.NET Framework,CLR被包含在DLL中,作為COM服務器在Windows注冊表中注冊。
一台電腦上可能安裝多個版本的CLR。打開開發人員命令提示,輸入CLRVer.exe,可以看到當前電腦上安裝的CLR版本。
比如,在C:\Windows\Microsoft.NET\Framework\v2.0.50727文件夾中,CLR被包含在mscorwks.dll中;在C:\Windows\Microsoft.NET\Framework\v4.0.30319文件夾中,CLR被包含在clr.dll中。
當雙擊一個應用程序,就啟動一個獨立的Windows進程,在.NET最新版本文件夾中有一個類似MSCoreEE.dll的組件去讀取應用程序的.NET版本,然後把對應的某個CLR版本加載到進程中。總之,CLR是寄宿在進程內的。
一個進程中可以有幾個CLR版本嗎?
從.NET 4.0起,就可以在一個進程中加載多個CLR版本,而且還不會造成兼容性的問題。
CLR是什麼時候卸載的?
只有當終止進程的時候才能卸載CLR。
CLR加載mscorlib中所有的程序集。
CLR加載托管堆。
CLR加載應用程序域,而且還可以加載多個應用程序域,默認加載的應用程序域是被設置為"啟動項目"的那個。
在應用程序域內運行多個線程,有些線程是主線程,有些線程是工作線程。