程序集

程序集

經由編譯器編譯得到的,供CLR進一步編譯執行的那個中間產物,在WINDOWS系統中,它一般表現為·dll或者是·exe的格式,但是要注意,它們跟普通意義上的WIN32可執行程序是完全不同的東西,程序集必須依靠CLR才能順利執行。

定義


1.程序集(assembly)是一個及一個以上託管模塊,以及一些資源文件的邏輯組合。
2.程序集是組件復用,以及實施安全策略和版本策略的最小單位。
3.程序集是包含一個或者多個類型定義文件和資源文件的集合。在程序集包含的所有文件中,有一個文件用於 保存清單。(清單是元數據部分中一組數據表的集合,其中包含了程序集中一部分文件的名稱,描述了程序集的 版本,語言文化,發布者,共有導出類型,以及組成該程序集的所有文件)。
4、在編譯應用程序中,所創建的CIL代碼存儲在一個程序集中,程序集包括可執行的應用程序文件(.exe擴展名文件)和其他應用程序使用的庫(.dll擴展名文件)。
作為一個單元進行版本控制和部署的一個或多個文件的集合。程序集是.NETFramework 應用程序的主要構造塊。所有託管類型和資源都包含在某個程序集內,並被標記為只能在該程序集的內部訪問,或者被標記為可以從其他程序集中的代碼訪問。程序集在安全方面也起著重要作用。代碼訪問安全系統使用程序集信息來確定為程序集中的代碼授予的許可權集。
程序集是.NET Framework編程的基本組成部分。

組成部分


1.程序集清單,包含描述該程序集中各元素彼此如何關聯的數據集合,還包含指定該程序集的版本要求和安全標識所需的所有元數據,以及定義該程序集的範圍和解析對資源和類的應用所需的全部元數據。
2.元數據,提供有關程序集中定義的類型的信息,包括類型的名稱,可見性,基類和類型所實現的介面。注意:程序集清單和元數據說明了程序集是自我描述的。
3.實現這些類型的MSIL代碼。
4.資源集,諸如點陣圖,指針,靜態文本等。

執行功能


1.包含公共語言運行庫執行的代碼。如果可移植可執行 (PE) 文件沒有相關聯的程序集清單,則將不執行該文件中的 Microsoft中間語言(MSIL) 代碼。請注意,每個程序集只能有一個入口點(即DllMainWinMain或 Main)。
程序集形成安全邊界。程序集就是在其中請求和授予許可權的單元。有關應用於程序集的安全邊界的更多信息,請參見程序集安全注意事項。
2.程序集形成類型邊界。每一類型的標識均包括該類型所駐留的程序集的名稱。在一個程序集範圍內載入的 MyType 類型不同於在其他程序集範圍內載入的 MyType 類型。
3.程序集形成引用範圍邊界。程序集的清單包含用於解析類型和滿足資源請求的程序集元數據。它指定在該程序集之外公開的類型和資源。該清單還枚舉它所依賴的其他程序集。
4.程序集形成版本邊界。程序集是公共語言運行庫中最小的可版本化單元,同一程序集中的所有類型和資源均會被版本化為一個單元。程序集的清單描述您為任何依賴項程序集所指定的版本依賴性。
5.程序集形成部署單元。當一個應用程序啟動時,只有該應用程序最初調用的程序集必須存在。其他程序集(例如本地化資源和包含實用工具類的程序集)可以按需檢索。這就使應用程序在第一次下載時保持精簡。
6.程序集是支持涇渭執行的單元。有關運行多個程序集版本的更多信息,請參見程序集和涇渭 (side-by-side) 執行。

總結


程序集可以是靜態的或動態的。靜態程序集可以包括 .NET Framework 類型(介面和類),以及該程序集的資源(點陣圖、JPEG 文件、資源文件等)。靜態程序集存儲在磁碟上的可移植可執行 (PE) 文件中。您還可以使用 .NET Framework 來創建動態程序集,動態程序集直接從內存運行並且在執行前不存儲到磁碟上。您可以在執行動態程序集后將它們保存在磁碟上。
有幾種創建程序集的方法。您可以使用過去用來創建 .dll(C#中的類庫文件) 或 .exe 文件的開發工具,例如 Visual Studio .NET。您可以使用在 .NET Framework SDK 中提供的工具來創建帶有在其他開發環境中創建的模塊的程序集。您還可以使用公共語言運行庫API(例如 Reflection.Emit)來創建動態程序集。