全局程序集緩存 (GAC)
計算機範圍內的代碼緩存,它存儲專門安裝的程序集,這些程序集由計算機上的許多應用程序共享。在全局程序集緩存中部署的應用程序必須具有強名稱
是的,gac中的所有的assembly都會存放在系統目錄"%winroot%/assembly下面。放在系統目錄下的好處之一是可以讓系統管理員通過用戶權限來控制assembly的訪問。
關於gac本身,上面所引述的一段話正是msdn中對gac的定義。gac全稱是global assembly cache,他的作用是可以存放一些有很多程序都要用到的公共assembly,例如system.data、system.windows.forms等等。這樣,很多程序就可以從gac裏面取得assembly,而不需要再把所有要用到的assembly都拷貝到應用程序的執行目錄下面。舉例而言,如果沒有gac,那麼勢必每個winform程序的目錄下就都要從c:/windows/microsoft.net/framework/v1.0.3705下面拷貝一份system.windows.forms.dll,這樣顯然不如都從gac裏面取用方便,也有利於assembly的升級和版本控制。
除了系統默認放置在gac中的assembly如system.windows.forms以外,我們也可以添加自己的assembly:
1)創建一個strong-name的assembly,例如toolbarcomponent.dll
2)運行gacutil -i toolbarcomponent.dll,把這個assembly添加到gac
3)在程序中動態裝載:
system.reflection.assembly ass=assembly.load("toolbarcomponent, version=1.0.934.20434, culture=neutral, publickeytoken=65f45658c8d4927f");
messagebox.show("is the assembly loaded from gac? "+ass.globalassemblycache);
在上面的程序中,toolbarcomponent就是從gac裝載而不是從程序的運行目錄下的dll文件中裝載,程序目錄下不需要放置toolbarcomponent.dll程序也能正常運行。另外,assembly.load()中的參數可以通過"gacutil -l"查到。
另外,上面提到了gac中的assembly必須是strong-name的。創建strong-name的assembly的步驟大致如下:
a) 在命令行運行“sn -k keypair.snk”創建一個密鑰文件。這裏的sn.exe也是.net附帶的一個工具。
b) 在vs.net裏面修改“assemblyinfo.cs”文件:
[assembly: assemblydelaysign(false)]
[assembly: assemblykeyfile("..//..//keypair.snk")]
c) 編譯項目,就能得到一個strong-name的assembly。
msdn中有一些對gac的介紹,您可以參考:
1)《assembly cache viewer (shfusion.dll)》
2)《global assembly cache》
.net framework中附帶了一些和gac有關的工具,其中包括:
1)gacutil.exe,一個命令行的工具,用於在gac中瀏覽、添加、刪除assembly
2)ngen.exe,也是一個命令行的工具,用於在gac中創建native image
3)mscorcfg.msc,一個mmc終端,可以圖形化完成gacutil.exe的主要功能。
上面是我看到的一篇Blog上的一些摘抄,希望以上一些介紹能夠對您有幫助!
全局程序集緩存(GAC)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
Java 學習---每個初學者都應該搞懂的問題
zhuiyang1986
2020-06-23 09:54:54
DataView&Page中的Controls到底該怎樣理解
zhuiyang1986
2020-02-21 01:56:19
DataRow屬性
zhuiyang1986
2020-02-21 01:56:19
HtmlControl 和 服務器端控件 和 運行在服務器端的htmlcontrol (runat=server) 的區別
zhuiyang1986
2020-02-21 01:56:19
什麼是WBS ?
zhuiyang1986
2020-02-21 01:56:18
關於QA......
zhuiyang1986
2020-02-21 01:56:18
抽象工廠模式(Abstract Factory)
zhuiyang1986
2018-09-01 17:54:20
petshop3.0構架介紹/petShop4.0解剖
zhuiyang1986
2018-09-01 17:54:16
C#中的interface abstract virtual異同
zhuiyang1986
2018-09-01 17:54:16
using與解決方案裏添加了(DLL)什麼區別
zhuiyang1986
2018-09-01 17:54:16
OrElse 運算子和AndAlso 運算子
zhuiyang1986
2018-09-01 17:54:16
簡單工廠模式和工廠方法模式及實例
zhuiyang1986
2018-09-01 17:54:14
ASP.NET中使用web.config配置數據庫連接
zhuiyang1986
2018-09-01 17:54:14
仿PetShop,C#反射機制爲題解答
zhuiyang1986
2018-09-01 17:54:14
VS.Net中程序集的Debug版本和Release版本的區別
zhuiyang1986
2018-09-01 17:54:14