CLR via C# 3 读书笔记(2):第1章 CLR执行模型 — 1.2 将托管模块组合为程序集
實際上,CLR直接打交道的是程序集,而不是模塊。程序集是一個抽象的概念,首先,它是一個或多個模塊或資源文件的邏輯組合(即程序集由多個模塊和資源文件組成)。其次,它是復用、安全、版本的最小單元。根據所選擇的編譯器和工具的不同,可以生成單一文件或多個文件的程序集。在CLR世界里,程序集就是我們稱作組件(component)的東西。
程序集提供了一種方式,將一組文件看作一個單獨的實體。
下圖解釋了什么是程序集。
在該圖中,使用工具對托管模塊和資源(或數據)文件進行處理。該工具生成了單一的PE32(+)文件,代表文件的邏輯組合。該PE32(+)文件包含一個叫做manifest的數據塊。manifest是另一個元數據表的集合。這些表描述了組成程序集的文件、由這些文件所實現的公有導出類型、以及與程序集相關的資源或數據文件。
默認情況下,編譯器會將產生的托管模塊轉換為一個程序集。也就是說,C#編譯器生成的是一個包含了manifest的托管模塊。其中的manifest表明程序集僅包含一個文件。對于僅包含一個托管模塊且沒有資源(或數據)文件的項目來說,程序集就是托管模塊,并且在創建過程中,不需要執行其他操作。如果希望將一組文件組合到一個程序集之中,需要使用更多的工具(assembly linker,AL.exe)及其命令行選項。
對于一個可重用、可部署(securable)、可實施版本管理(versionable)的組件來說,程序集可以將邏輯表示和物理表示相分離(解耦)。如何將代碼和資源放置于不同的文件則完全取決于我們自己。
一個程序集的模塊還包含被引用的程序集的一些信息(如其版本號)。這些信息使程序集能夠自描述(self-discribing)。換句話說,為了執行程序集中的代碼,CLR可以確定程序集的直接依賴。(the CLR can determine the assembly’s immediate dependencies in order for code in the assembly to execute)不需要再在注冊表或活動目錄領域服務(Active Directory Domain Services)中獲取更多的信息。由于不再需要額外的信息,因此部署程序集比部署非托管組件要容易得多。
總結
以上是生活随笔為你收集整理的CLR via C# 3 读书笔记(2):第1章 CLR执行模型 — 1.2 将托管模块组合为程序集的全部內容,希望文章能夠幫你解決所遇到的問題。