程序集(dll) 安裝到 GAC && 程序集添加到VS引用開窗(轉)

一 首先    程序集(dll) 安裝到 GAC 中的方法

         所謂的GAC,就是全局程序集緩存(Global Assembly Cache)。

        針對一些類庫項目或用戶控件項目在程序開發完成後,有時需要將開發的程序集(dll文件)安裝部署到GAC(全局程序集緩存)中,以便其他的程序也可以調用。被放入GAC的程序集,無論在何處被其他程序集引用,都可以保證自己能夠被CLR找到並且加載。簡單來說,GAC是一個有規範的目錄結構。如果主機使用的是Windows操作系統,並且操作系統被安裝在c:\windows下,那麼GAC會被安裝在c:\windows\assembly\下。

在一般情況下,GAC具有如下優點:
· 程序集被多處引用時,可有效減少內存成本。
· 通過發佈者策略可以有效地發佈程序集的最新版本。
· 同一程序集的多個版本可以共存,並且可以通過配置進行切換。
是否所有的程序集都可以被放入GAC中呢,答案是否定的。

開始安裝 

第一步: 給項目添加強名稱:

  1. 在類庫項目調試完成後,使用sn.exe工具生成一個密鑰,此工具位於安裝 .NET Framework 解決方案開發人員工具包 (SDK) 的 \bin 子目錄中。SN 工具易於使用。

      命令行語句採用以下形式:

       sn -k "[DriveLetter]:\[DirectoryToPlaceKey]\[KeyName].snk"

        即: sn -k "生成的密鑰的全路徑"。 如在命令行輸入: sn -k D:/myKey.snk

  2. 方法一:將密鑰與項目的程序集進行關聯: 項目屬性-->簽名-->爲程序集簽名-->選擇強名稱密鑰文件。
      方法二   在項目的AssemblyInfo.cs文件中,修改"AssemblyKeyFile"的屬性。 例如: [assembly:AssemblyKeyFile("D://myKey.snk")]

  3. 重新生成項目集。

 

第二步: 將dll添加到GAC中

    一般來說,將程序集(dll)安裝到GAC中有以下幾種方法:

1.  管理工具->Microsoft.NET Framework 2.0 配置->管理->我的電腦->程序集緩存->選中右鍵"添加"->將程序集添加到程序集緩存。

2.  手動將要安裝部署的dll文件拖至系統目錄windows下的assembly文件夾下(一般爲C:/windows/assembly),此種方法不便於在安裝部署時使用。

3.   使用gacutil.exe工具安裝:gacutil -i "要註冊的dll文件全路徑"。

     "gacutil.exe”工具爲.NET自帶工具(C:/Program Files/Microsoft Visual Studio 8/SDK/v2.0/Bin)

  在開始運行中輸入"cmd”進入命令窗口,通過CD選擇到"gacutil.exe”文件所在的目錄,如在命令行輸入: gacutil -i D:/Microsoft.SharePoint.dll


好了現在已經成功將DLL 安裝到了GAC中但是這裏有兩點注意:

  1. 將程序集安裝到GAC後,在VS的添加引用的對話框中並不會出現該程序集。 例如我將my.dll這個程序集使用Gacutil -i my.dll註冊到GAC後,在添加引用的對話框中我們並不能找到它,這是因爲添加引用對話框中的程序集都是位於"C:/Program Files/Reference Assemblies/" 或 "C:/Windows/Microsoft.NET/Framework/版本號/"下,可以通過註冊表增加類似的文件夾使得可以被添加引用對話框搜索到其下的程序集 下面即將介紹到
  2. 需要大家明白一點,將程序集安裝到GAC中主要是爲了方便共享以及解決Dll hell的問題,並不適合在程序開發的過程中使用。那怎麼樣才能使用GAC中的程序集呢?這個不用你擔心,Runtime會在GAC或指定目錄中自動搜索所要引用的程序集。

二 程序集添加到 add refetence中的方法

 在Visual Studio中,當爲一個工程添加程序集引用時,彈出的“Add Reference”對話框會列出來一些程序集引用。那麼如何把自己的程序集也添加到這裏呢?

 

add reference是通過註冊的路徑進行掃描讀取的。

因此通過修改註冊表的方法可以做到這點。

對於32位的操作系統,添加如下注冊表鍵的一個:

[HKEY_CURRENT_USER\SOFTWARE\Microsoft\.NETFramework\VersionMinimum\AssemblyFoldersEx\MyAssemblies]@="AssemblyLocation"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\VersionMinimum\AssemblyFoldersEx\MyAssemblies]@="AssemblyLocation"

 

對於64位的操作系統,在32位註冊表分支中添加如下注冊表鍵的一個:

[HKEY_CURRENT_USER\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\VersionMinimum\AssemblyFoldersEx\MyAssemblies]@="AssemblyLocation"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\VersionMinimum\AssemblyFoldersEx\MyAssemblies]@="AssemblyLocation"

 

VersionMinimum表示應用的最低.NET Framework版本。如果VersionMinimum是v3.0,在AssemblyFoldersEx中指定的文件只適用於目標.NET Framework是3.0和更新的。

AssemblyLocation表示你想要在“Add Reference”對話框中顯示的程序集所在位置。在HKEY_CURRENT_USER節點下創建隻影響當前用戶的設置。關閉並重啓VS之後,在填加程序集時就能夠看到新加的引用。

1.創建並build一個DLL名字爲TestAddReference.dll,把它拷貝到c:\test目錄下

 

2.創建註冊表鍵和鍵值[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v2.0.50727\AssemblyFoldersEx\testDll]@="c:\test\"

 

3.重新打開VS,添加引用,在彈出的“Add Reference”對話框中,如果工程的目標.NET Framework是在v2.0.50727版本以上,你會看到TestAddReference

 

 

需要注意點:

1 32位機器與64位機器的註冊表鍵值插入位於不同位置。

2 不同類型的程序註冊表位置不同 silverlight 以及 windows phone 不再.netframework 裏面而是在 Microsoft Sdks 裏面

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章