一、 程序集定義
由.NET 編譯生成的EXE文件或DLL文件就是程序集,例如:System.Data.dll。
二、 程序集結構
1. 程序集清單:和我們在淘寶買東西的配送清單一樣就是說明裏麪包含了什麼東東。
2. 類型元數據:類型元數據是描述程序集中定義的類型的信息,由一些元數據表組成,包含 類、方法、屬性、參數、返回值等。
3. MSIL代碼:每一種類型的二進制代碼,這些代碼存儲爲與機器無關的MSIL代碼。
4. 資源:程序的不可執行部分,比如圖片等。
三、 查看程序集
在工具菜單下-外部工具-添加
標題輸入Ildasm(中間語言反彙編程序)
命令選擇:C:/Program Files/Microsoft Visual Studio 8/SDK/v2.0/Bin/ildasm.exe然後選擇剛纔的Ildasm菜單-文件-選擇你的DLL文件即可查看,結果如下圖。
Manifest:就是程序集清單通過這個我們可以看出它引用外部的程序集等資源以及對自身模塊的說明。.assembly extern mscorlib這樣的說明是說明它對外部的引用。程序集自身的信息包括:程序集文化、版本號、版本屬性、AssemblyVersion、版本兼容性。
四、 使用程序集
例如: 添加引用-選擇DLL文件就是引用了程序集。
五、 私有和共享程序集
1. 私有程序集:私有程序集必須和應用程序在相同的目錄下。默認的都是私有程序集。
2. 共享程序集:共享程序集存放在GAC(全局程序集高速緩存位於windows/assembly目錄下,如下圖)區,任何程序都可以引用它。
3. 強名:爲了保護和區分不同的共享程序集(因爲程序集有可能是多個人開發的但是名字一樣),我們必須在共享程序集上加密鑰。如果密鑰不同即使兩個組件的名稱相同也不是同一組件。程序集名稱+版本+公共密鑰=強名
4. 如何創建共享的程序集?
我們通過-程序-Microsoft Visual Studio 2005-Visual Studio Tools-Visual Studio 2005 命令提示,執行sn.exe外部程序。
第一步、將目錄轉換到當前dll文件的目錄下然後執行sn -k DLL文件名, 即如圖通過以下命令生成一個密鑰AssemblyT.snk。
第二步、選擇當前項目-屬性然後給項目選擇密鑰然後重新編譯程序,如下圖。
我們在通過Ildasm工具查看DLL文件的時候會發現已經簽入了一個publickey密鑰。
第三步、將新生成的AssemblyT.dll文件拖放到windows/assembly下我們既可以引用了。
第四步、我們建立個WEB程序調用一下。
using AssemblyT;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Oprator O = new Oprator();
Response.Write(O.Plus());
}
}
輸出結果:3
六、 程序集的用途
1. 通過反射(類似我們上面用的Ildasm,反編譯。 只不過反射是通過我們自己寫代碼來獲取程序集信息的)動態的獲取他的內容,如類、字段、方法等如: PetShop工廠模型裏用的反射。
2. 通過反射獲取Assemble的信息(語言、本版等)。
3. 開發組件或接口等。
注意:
一般來說一個命名空間就生成一個程序集,比如我們開發系統常用到的三層結構如果建立項目的時候選擇默認的命名空間那麼他們就是一對一的 WEB.DLL, BLL.DLL,DAL.DLL。但是它們不一定總是一對一的。一個命名空間可以生成多個程序集,而一個程序集也可以包含多個命名空間下的東西,它們沒有必然的聯繫。
---------------------
作者:yanglaiwang
來源:CSDN
原文:https://blog.csdn.net/yanglaiwang/article/details/5470389
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!