[C#]C#學習筆記-程式集

來源:互聯網
上載者:User

C#學習筆記-程式集

羅朝輝(http://www.cnblogs.com/kesalin/)

《C#與.NET進階程式設計》讀書筆記

 

1,程式集,簡單來說就是一個以公用語言運行庫(CLR)為宿主的,版本化的,自描述的二進位檔案,雖然現實中的.NET程式集與Win32二進位檔案的的副檔名相同(*.exe或*.dll),但是兩者的內部構成幾乎完全不同。C#程式集具有如下有點:使用命名空間確定類型邊界;可版本化;是自描述的(不需要訪問註冊表來定位);是可配置的。

2,程式集的格式包括如下幾個部分:Win32檔案首部;CLR檔案首部;CIL代碼;類型中繼資料;資訊清單;可選的嵌入資源。我們可以使用 dumpbin.exe 來查看Win32檔案首部和CLR檔案首部,使用 ildasm.exe 或 reflector.exe來查看程式集的CIL代碼,中繼資料或清單。

Win32檔案首部:它使程式集可以被Windows系統載入或操作;

CLR檔案首部:它定義多個標記,使得運行庫可以瞭解到託管檔案的布局。這些標記標識了檔案中中繼資料和資源的位置,程式集構建的運行版本,(可選的)公開金鑰值等。 

CIL代碼:CIL代碼是程式集的核心部分, 且是獨立於平台和CPU的中繼語言。在運行時,程式集內部的CIL代碼才被(即時的JIT編譯器)編譯成特定平台和CPU的指令。正是這樣的機制,保證.NET程式集的跨平台,跨語言。

中繼資料:它完整地描述了程式集內含類型和引用外部類型的格式。運行庫利用中繼資料在記憶體的二進位布局類型中解析類型(以及類型的成員)的位置,使遠程方法調用更便利。此外,程式集必須被關聯一個manifest,該清單詳細記錄了程式集中的每一個模組,構建程式集的版本以及該程式集引用的所有外部程式集。

可選的嵌入資源:嵌入資源可包括應用程式圖示,映像,聲音或字串表,還支援附屬組件(只包含本地化資源)。

3,單檔案程式集的所有必要部分(首部資訊,CIL代碼,類型中繼資料,清單和必需的資源)都包含在一個*.exe 或 *.dll 包中。多檔案程式集是一個.NET *.dll 的集合,這些dll作為單個邏輯單元進行部署和版本化。通常,其中一個會作為主模組,它將包含程式集層級的清單(以及必要的CIL代碼,中繼資料,頭資訊和可選資源)。主模組的清單記錄了它依賴的每一個*.dll檔案。根據命名習慣,多檔案程式集的輔助模組的副檔名一般是 *.netmodule,但這不是強制要求。輔助模組也包含CIL代碼和類型中繼資料,同時還有一個模組層級別的清單,它記錄該模組外部參考的程式集。 多檔案程式集的優點是:提高了程式載入的效率-可按需載入;允許模組由不同的.NET程式設計語言編寫。組成一個多檔案程式集的模組並沒有相互串連成一個大檔案,它們只是依靠在主模組清單中記錄的資訊邏輯地串連在一起。 4,私用組件要求放置在用戶端應用程式所在目錄或其子目錄下。我們假定私用組件並不需要詳細檢查版本,因為用戶端應用程式是唯一知道其存在的實體。.NET運行環境使用一種叫做探測(probing)的技術解析私用組件的位置。該技術是一種把外部程式集請求映射到被請求的二進位檔案的過程。嚴格來說,一個載入請求可以使顯示的或隱式的。隱式的載入請求發生在CLR查詢清單的.assembly extern標記來解析程式集位置的時候。顯式的載入請求發生在以編程方式調用System.Reflection.Assembly類的Load()或LoadFrom()方法時,這兩個方法主要在後期綁定或動態調用類型成員時用到。不管是顯式還是隱式,在CLR獲得程式集的名稱之後,便開始探測用戶端應用程式目錄(及其子目錄)下的*.dll檔案,如果找不到就嘗試尋找具有相同名字的可執行程式集*.exe,如果還找不到就會引發FileNotFound異常。當然我們也可以建立如*.config格式的設定檔來修改探測規則。 5,共用組件是類型和(可選)資源的集合,它與私用組件的區別在於共用組件的一個副本可供一台機器上的多個應用程式使用。共用組件是安裝在GAC下的,GAC是在Windows目錄下名為Assembly的目錄(如:C:\Windows\Assebly)。程式集被部署到GAC前,都會被賦予一個強式名稱,該強式名稱標識該程式集的發行者,其作用有點像COM中的GUID。強式名稱是基於密碼學上的公開金鑰與私密金鑰的,這種機制比GUID更唯一和抗篡改。強型別由一組相關的資料群組成:程式集的名稱,版本號碼,公開金鑰值(由sn.exe工具產生),用於本地化的可選地區性標識以及嵌入的數位簽章。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.