一、什麼是GAC?GAC解決什麼問題? html
GAC全稱爲: Global Assembly Cach(全局程序集緩存),你能夠在你的電腦的系統盤如:C:\Windows\assembly\看到目前計算機上安裝的GAC。web
舉一個最簡單的例子,不少初學.NET的開發人員進行數據訪問都是從SqlHelper.cs開始的,SqlHelper是一個數據訪問對象,提供對數據庫操做的各類方法,名字大概是學從PetShop吧,樣子大概是這個樣子, 又或是這個樣子,且無論長啥樣,若是部署在服務器上的多個應用都使用此對象,那麼基本上會有下面幾種相似的處理方法:數據庫
(1)將此類直接拷貝到項目中使用;緩存
(2)建一個類庫項目,包含此類,而後編譯爲dll,再在應用中添加引用以使用此程序集中的SqlHelper;服務器
(3)將(2)中的dll註冊爲GAC,直接在應用中使用,就像使用System.IO、System.Net同樣 ;測試
當SqlHelper.cs更新後,對於(1)和(2)你可能會感受到很是痛苦,由於要逐個應用去替換,而對於(3)則簡單多了,只須要將編譯後的dll從新註冊到GAC就能夠了。網站
記得在MSDN曾經看到過一句話,說是「.NET程序集解決了DLL Hell」的問題。spa
說這裏,先說個故事:有一天,一個朋友的同事問我,「寫過動態連接庫嗎?」, 我一時居然沒想起是什麼,日常說dll太多了,幾乎都忘記「動態連接庫」這幾個字了,不過還好,腦子裏還有抹不去的記憶。命令行
「.NET程序集解決了DLL Hell」關鍵一點就是相同名稱而不一樣版本的程序集能夠共存,打開Assembly所在目錄,如:C:\Windows\assembly,看一下就比較清楚了。debug
能夠思考一下,爲何同一系統中能夠安裝多個版本的.NET Framework、Visual Studio;而有些軟件是不行的,只能存在惟一版本,大概就是這個道理。
二、將DLL註冊到GAC
(1)建立DLL:新建一個類庫項目,名稱爲GACDemo,再添加一個類,如:
右擊項目,有菜單中選擇屬性,按以下操做生成強命名Key (GAC中的Assembly必須是strong-name的 )
而後編譯,以前我註冊過一次,版本爲1.0.0.0,編譯以前,我將版本修改成了2.0.0.0。
(2)註冊
以管理員身份運行命令行
進入到類庫項目的bin/debug目錄,執行gacutil -if gacdemo.dll
查看 C:\Windows\assembly
兩個版本並存。
三、在ASP.NET中使用GAC
這個就簡單了,新建一個ASP.NET網站,添加引用,寫以下測試代碼
編譯網站。
在IIS中發佈網站:
VS2008直接右擊項目發佈網站。
VS2010右擊網站點擊發布,選擇文件系統。
發佈後的文件目錄:
而後在IIS中發佈網站(這裏是IIS7):
而後瀏覽default.aspx,看到輸出的結果是3。
原文地址:http://www.cnblogs.com/Ferry/archive/2010/12/17/1908817.html