一、名稱解釋:
CLS:common language specilication:通用語言規範;
CLR:common language Runtime 通用語言執行平台。
Managed 程式碼:編譯的代碼直接clr等一層一層的進行 代碼編譯(C#--C#編譯器--CLR(把它編譯為IL)--IL--本地cpu可執行代碼)並進行型別安全驗證、資源釋放等操作。
Unmanaged 程式碼:c#語言產生的程式碼直接由cpu執行,所以需要自己處理資源釋放、型別安全檢查、等一系列的操作。
中繼資料:包含程式運行所需的一切資源資訊,中繼資料中包含3個表:定義表(Def)、參考資料表(Ref)、清單表。
其中定義表、參考資料表:中分別包含了 模組(ModuleRef、MouduleDef)、類型(type)、方法(Method)、欄位(Filed)、參數(Param)、屬性、事件的參考資料表和定義表(都是在他們後面加Def或者ref)。
清單表:一組中繼資料的集合,包含程式集中一部分檔案名稱、還描述了程式集的版本、語言、發行者、共有打出類型、以及程式所需的所有檔案;
清單中繼資料:AssemblyDef、FileDef、MainfestResourceDef(包含程式集的所以資源條目,和一個該資源在資源檔或者流在FileDef表中的索引,如果該資源不是單獨檔案則把它嵌入到PE檔案中)、ExportTypesDef(程式集中所有的PE模組匯出的每一個共有類型都在其中;還包括了類型名稱,一個FileDef表中的引用,和一個TypeDef表的索引,清單PE檔案中的類型不會在該表中)。清單為程式使用者和其各個部分直接提供了一個層接關係,實現程式集自描述。資訊清單知道該清單所包含的檔案是一個程式集的,但是其他程式集卻不知道他們是一個程式集。
codeBase:在設定檔中定義;儲存應用程式需要下載的組件檔,其中包含得有需要下載程式集的url。當程式載入一個程式集時,CLR首先獲得codebase元素的地址,然後在本地機器下緩衝中看是否存在該檔案,如果存在則載入,不存在拋出FileNotFoundException異常。
程式集(exe、dll):定義了可重用的類型、版本號碼、安全相關的資訊。
二、vs支援很多語言,所有的語言經過自己的編譯器處理,clr處理,最後產生IL代碼。也就是說所有的語言建立在同一個基礎上的,所有可以實現不同語言產生的dll、或者exe檔案之間公用,也方便了代碼的反編譯。但是公用exe或者dll檔案的標準是他們必須遵循CLS規則。如vb中不區分大小寫、c#中區分、c++中不支援無符號類型等。所有在寫能讓其他語言調用的代碼時必須遵循cls規則,統一原則。才可以相互調用,可以給代碼設定屬性,讓其檢查當前語言編寫規範是否符合cls規則(方法在類上方聲明屬性:assembly:[CLSCompliant(true))] 編譯器就會自動檢查上方cls相容。