1、源代碼-面向CLR的編譯器-託管模塊-(元數據&IL代碼)中介紹了編譯器將源文件編譯成託管模塊(中間語言和元數據),本文主要介紹如何將託管模塊合併成程序集.html
二、程序集生成的過程編程
注:緩存
(1)、清單指出程序集只有一個文件組成安全
(2)、對於只有一個託管模塊,沒有資源文件的項目,程序集就是託管模塊.編程語言
(3)、若是須要將一組文件合併到程序集中可使用程序集連接器(AL.exe)以及其餘的一些命令行選項.工具
三、如何構建可重用、可版本控制、可保護的組件.post
經常使用的方法是,把程序集的物理表示和邏輯表示區分開,將不多用到的類型和文件放到單獨的文件中,並將這些文件做爲程序集的一部分,若是運行時須要,則去下載,這樣不只節省了磁盤空間,還節省了安裝時間.經過程序集,能夠在不一樣的地方部署,同時任然將全部的文件看成一個總體來看待.url
四、關於程序集自描述的優勢.net
在程序集的模塊中,還包含與引用的程序集有關的信息(版本號、描述等等),具體以下圖命令行
這些信息(固然遠不止上圖中的這點信息)使程序集可以自描述.也就是說CLR能判斷爲了執行程序集中的代碼,程序集的直接依賴對象是什麼.不須要在註冊表或者Active Directory Domain Services(ADDS)中註冊額外的信息.因爲無需額外的信息,因此和非託管組件相比,程序集更容易部署.
五、將模塊合併成程序集
程序集構成簡介:
1、源代碼-面向CLR的編譯器-託管模塊-(元數據&IL代碼)中介紹了C#源碼經過編譯器最終生成託管模塊,而託管模塊是標準的32位Microsoft Windows可移植執行體(PE32)文件或者標準的64位Microsoft Windows可移植執行體(PE32+)文件。
而exe文件並非只含有元數據的PE文件,它仍是程序集.程序集是一個或多個類型定義文件及資源文件的集合,
程序集清單文件簡介:
在程序集的全部文件中2、源代碼=>程序集及程序集概念介紹,有一個文件容納了清單.清單也是一個元數據表集合(關於元數據表請參考10、元數據概述),表中主要包含做爲程序集組成部分的那些文件的名稱,除此以外,還描述了程序集的版本、語言文化、發佈者、公開導出的類型以及構成程序集的全部文件.
CLR操做的是程序集,CLR老是先加載"清單"中的數據,在根據"清單"中的數據來獲取程序集中其餘文件的名稱.如下是程序集的重要特色
(1)、程序集定義了可重用的類型
(2)、程序集用一個版本號標記
(3)、程序集能夠關聯安全信息
除了包含清單元數據表的文件,程序集其餘的單獨文件並不具有上述特色.
類型爲了進行順利的打包、版本控制、安全保護以及使用,必須放在做爲程序集一部分的模塊中,程序集大多時候只有一個文件,就像前面的Program.exe文件那樣,然而,程序集還可由多個文件構成,一些文件是含有元數據的PE文件,另外一些是.gif文件或.jpg這樣的文件,爲了便於理解,可將程序集看做一個邏輯EXE或DLL.
六、Microsoft引入程序集的的緣由
使用程序集將可重用類型的邏輯表示與物理表示區分開,例如,程序集可能包含多個類型,能夠將經常使用類型放到一個文件中,不經常使用類型放到另外一個文件中.若是程序集須要從Internet下載並部署,那麼對於含有不經常使用類型的文件,假如客戶端永遠不使用那些類型,該文件就永遠不會下載到客戶端.
七、配置應用程序下載程序集文件
爲了配置應用程序去下載程序集文件,可在應用程序配置文件中指定codeBase元素,在codeBase元素定義的URL所指向的位置,可找到程序集的全部文件.
應用程序下載程序集的過程以下:
(1)、CLR獲取codeBase元素的URL
(2)、檢查機器的下載緩存,判斷文件是否存在.若是是,直接加載文件.若是不是,CLR去URL指向的位置將文件下載到緩存.
(3)、若是找不到文件,CLR在運行時拋出FileNotFoundException異常.
八、使用多文件程序集的三點理由
(1)、不一樣的類型用不一樣的文件,是文件能以"增量"方式下載(如Internet下載方式).另外,將類型劃分到不一樣的文件中,能夠對購買和安裝的應用程序進行部分或分批打包/部署.
(2)、可在程序集中添加資源或數據文件.
例如,假定一個類型的做用是計算保險信息,須要訪問精算表才能完成計算,這種狀況下,沒必要在本身的源代碼中嵌入精算表,相反,可使用一個工具(好比稍後要討論的程序集連接器AL.exe),是數據文件成爲程序集的一部分.順便說一句,數據文件能夠爲任意格式,只要應用程序知道如何解析便可.
(3)、程序集包含的各個類型能夠用不一樣的編程語言來實現.例如,一些類型能夠用C#實現,一些用VB來實現,其餘則用其餘語言來實現,編譯用C#寫的類型是,編譯器會生成一個一個模塊,編譯用VB寫的類型時,編譯器也會生成另外一個模塊,而後使用工具將全部的模塊合併成一個程序集.
好處:這樣其餘開發人員只知道這個程序集包含了一系列的類型信息,根本不知道、也不用知道這些類型分別是用什麼語言編寫的.固然可使用ILDasm.exe得到相應的IL源代碼文件。而後運行ILAsm.exe.將全部的
九、將模塊還原成單個文件
(1)、對每一個模塊都運行ILDasm.exe,得到相應的IL源代碼文件.
(2)、運行ILAsm.exe,將全部的IL源代碼文件傳給它.隨後,ILAsm.exe會生成包含類型的單個文件.
前提:生成的IL代碼足夠乾淨.
十、關於程序集必知的重點
(1)、程序集是進行重用、版本控制和應用安全性設置的基本單元。它容許將類型
轉載自https://blog.csdn.net/weixin_33811961/article/details/86128955