C#程序集及程序集概念介紹

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

相關文章
相關標籤/搜索