在.NET Framework框架中,程序集是重用、安全性以及版本控制的最小單元。程序集的定義為:程序集是一個(gè)或多個(gè)類(lèi)型定義文件及資源文件的集合。程序集主要包含:PE/COFF,CLR頭,元數(shù)據(jù),清單,CIL代碼,元數(shù)據(jù)。

   PE/COFF文件是由工具生成的,表示文件的邏輯分組。PE文件包含“清單”數(shù)據(jù)塊,清單是由元數(shù)據(jù)表構(gòu)成的另一種集合,這些表描述了構(gòu)成程序集的文件,由程序集中的文件實(shí)現(xiàn)的公開(kāi)導(dǎo)出的類(lèi)型,以及與程序集關(guān)聯(lián)在一起的資源或數(shù)據(jù)文件。

   在托管程序集中包含元數(shù)據(jù)和IL(微軟的一種中間語(yǔ)言),IL能夠訪問(wèn)和操作對(duì)象類(lèi)型,并提供了指令來(lái)創(chuàng)建和初始化對(duì)象、調(diào)用對(duì)象上的虛方法以及直接操作數(shù)組元素。

   CLR頭是一個(gè)小的信息塊,主要包含模塊在生成是所面向的CLR的major(主)和major(次)版本號(hào);一個(gè)標(biāo)志,一個(gè)MethodDef token(指定了模塊的入口方法);一個(gè)可選的強(qiáng)名稱數(shù)字簽名。

   元數(shù)據(jù)表示一個(gè)二進(jìn)制數(shù)據(jù)塊,由幾個(gè)表構(gòu)成:定義表,引用表,清單表。

   以上是對(duì)程序集的構(gòu)成做了一個(gè)簡(jiǎn)單的說(shuō)明,接下來(lái)看一下程序集的一些特性:程序集定義了可重用的類(lèi)型;程序集標(biāo)記了一個(gè)版本號(hào);程序集可以有關(guān)聯(lián)的安全信息。

  在程序運(yùn)行時(shí),JIT編譯器利用程序集的TypeRef和AssemblyRef元數(shù)據(jù)表來(lái)確定哪一個(gè)程序集定義了所引用的類(lèi)型。JIT編譯器在運(yùn)行時(shí)需要獲取程序集的相關(guān)信息,主要包括:名稱、版本、語(yǔ)言文化、公鑰標(biāo)記等,并將這些連接為一個(gè)字符串。JIT編譯器會(huì)差查找該標(biāo)識(shí)的程序集,如果查詢到,則將該程序集加載到AppDomain。

   接下來(lái)介紹一下在CLR中加載程序集的方法:

    在System.Refection.Assembly類(lèi)的靜態(tài)方法Load來(lái)加載程序集,在加載指定程序集的操作中