這一節先簡單的討論一下程序集以及CLR的初始化安全
雖然對應的編譯器會生成託管模塊,但實際上CLR不與託管模塊工做,編譯器除了編譯還有將生成的託管模塊轉換爲程序集的功能,微軟還提供了工具AL.exe(程序集連接器)。編輯器
程序集:工具
一、是一個或者多個模塊或者資源的分組,是安全性、重用、版本控制的最小單元。spa
二、程序集還有一個相似於懶加載的機制,將不經常使用的類或者資源放在一個單獨的文件中,當使用時纔會下載,能夠節約磁盤和縮短安裝時間.net
三、此外程序集還能夠自描述,在CLR讀取程序集時無需額外信息,由於程序集自帶了關於自生的全部信息,因此更容易部署版本控制
][2]orm
編譯器會經過源碼生成EXE、DLL文件,但不管哪種最終都是由CLR運行,但運行CLR以前必須先安裝.net Framework,判斷是否安裝只需檢查System32目錄中是否含有MSCorEE.dll文件便可,微軟還提供了CLRVer.exe檢查CLR的版本號工具。blog
可是並非只要安裝了.net Framework就能夠運行程序集,須要對應程序集特定的環境才能夠運行,例如生成的64位的程序集沒法再32位的環境下運行,因此在運行程序集以前須要對檢查程序集的信息,可使用DumpBin.exe和CoreFlags.exe工具查看。進程
程序集的版本是由編輯器設置的,C#的編譯器提供了一個/platform開關選項能夠設置生成對應的不一樣程序集圖片
如下是對應.platform 開關生成的模塊在不一樣環境下的運營狀況
![
因此在運行程序集以前大體作了以下幾個動做:
一、先讀取程序集的信息
二、建立對應環境的進程
三、加載MSCorEE.add文件並調用方法初始化程序集
四、加載程序集
五、調用入口Main方法
至此就完成的CLR的全部準備工做,接下來纔是重頭戲,CLR如何是如何與程序集工做,你會還了解帶託管代碼的多處優點