日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GAC及其作用

發布時間:2023/12/9 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GAC及其作用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://www.cnblogs.com/smallstone/archive/2010/06/29/1767508.html

一、GAC的作用

????? 全稱是Global Assembly Cache作用是可以存放一些有很多程序都要用到的公共Assembly,例如System.Data、System.Windows.Forms等等。這樣,很多程序就可以從GAC里面取得Assembly,而不需要再把所有要用到的Assembly都拷貝到應用程序的執行目錄下面。舉例而言,如果沒有GAC,那么勢必每個WinForm程序的目錄下就都要從C:\WINDOWS\Microsoft.NET\Framework\vX下面拷貝一份System.Windows.Forms.dll,這樣顯然不如都從GAC里面取用方便,也有利于Assembly的升級和版本控制。

二、強命名程序集

???? 因為不同的公司可能會開發出有相同名字的程序集來,如果這些程序集都被復制到同一 個相同的目錄下,最后一個安裝的程序集將會代替前面的程序集。這就是著名的Windows “DLL Hell”出現的原因。

  很明顯,簡單的用文件名來區分程序集是不夠的,CLR需要支持某種機制來唯一的標識一個程序集。這就是所謂的強命名程序集。

  一個強命名程序集包含四個唯一標志程序集的特性:文件名(沒有擴展名),版本號,語言文化信息(如果有的話),公有秘鑰。

  這些信息存儲在程序集的清單(manifest)中。清單包含了程序集的元數據,并嵌入在程序集的某個文件中。

  下面的字符串標識了四個不同的程序集文件:

  “MyType, Version=1.0.1.0,

  Culture=neutral, PublicKeyToken=bf5779af662fc055”

  “MyType, Version=1.0.1.0,

  Culture=en-us, PublicKeyToken=bf5779af662fc055”

  “MyType, Version=1.0.2.0,

  Culture=neturl, PublicKeyToken=bf5779af662fc055”

  “MyType, Version=1.0.2.0,

  Culture=neutral, PublicKeyToken=dbe4120289f9fd8a”

  如果一個公司想唯一的標識它的程序集,那么它必須首先獲取一個公鑰/私鑰對,然后將共有秘鑰和程序集相關聯。不存在兩個兩個公司有同樣的公鑰/私鑰對的情況,正是這種區分使得我們可以創建有著相同名稱,版本和語言文化信息的程序集,而不引起任何沖突。

  與強命名程序集對應的就是所謂的弱命名程序集。(其實就是普通的沒有被強命名的程序集)。兩種程序集在結構上是相同的。都使用相同的PE文件格式,PE表頭,CLR表頭,元數據,以及清單(manifest)。二者之間真正的區別在于:強命名程序集有一個發布者的公鑰/私鑰對簽名,其中的公鑰/私鑰對唯一的標識了程序集的發布者。利用公鑰/私鑰對,我們可以對程序集進行唯一性識別、實施安全策略和版本控制策略,這種唯一標識程序集的能力使得應用程序在試圖綁定一個強命名程序集時,CLR能夠實施某些“已確知安全”的策略(比如只信任某個公司的程序集)。

三、如何創建強命名程序集, 如何查看強命名程序集的PublicKeyToken

如何創建強命名程序集

===================

1. 在Visual Studio中的class library工程上點右鍵, 選擇properties.

2.? 選擇左邊的Signing選項卡.

3. 勾選Sign the assembly復選框. 在下拉列表中選擇<New...>.

4. 在彈出的對話框中給snk文件起一個名字. 按OK.

5. 程序集強命名完成.

如何查看強命名程序集的public key token

=========================

有時候你需要在web.config文件中或者其他地方引用自己寫的強命名程序集, 你需要寫入像下面這樣的fully qualified name:

MyNamespace.MyAssembly, version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

前面三個部分比較容易獲得, 因為是你自己寫的, 你當然知道assembly的名字, 版本, 還有culture信息. 比較麻煩的部分是如何獲得自己簽名的程序集的public key token. 一種平常的方法是使用Reflector來打開自己的程序集, 然后獲得token(實際上, Reflector會給你如同上面例子那樣的完整信息). 但是這有的時候還是顯得有點未免殺雞用牛刀了. 如果你已經打開了Visual Studio, 那么僅僅是在VS的菜單里點一個菜單項就能獲得答案不是更好么? 下面就是步驟.

1. 在Visual Studio中, 打開Tools菜單, 然后點擊External Tools這個菜單項.

2. 在彈出的External Tools對話框中, 點擊Add按鈕.

3. 按照下圖進行配置. sn.exe這個工具在不同版本的VS下處于不同的文件夾中. 最簡單的找到它的方式是在VS Command Prompt中輸入"where sn.exe". 在參數框里寫入"-T $(TargetPath)". 然后勾選"Use Output Window". 這樣的話, 結果就會在VS的output window. 然后點擊OK,

4. 結果如圖.

5. 在輸出窗口可以看到結果. 這在你的solution里有多個project的時候也是可以正常工作的. 只需要點擊一下Solution Explorer中的Project, 然后點擊我們的菜單項就可以了.

四、如何將自己的dll注冊到GAC中

在開發和測試中,最常用的工具就是GACUtil.exe。 在GAC注冊程序集跟COM注冊差不多,但相對更容易:
??? 1.把程序集添加GAC中: GACUtil /i sample.dll (參數/i是安裝的意思)
??? 2.把程序集移出GAC GACUtil /u sample.dll (參數/u就移除的意思)
注意:不能將一個弱命名程序集安裝GAC中。
如果你試圖把弱命名程序集加入GAC中,會收錯誤信息:”
??? Failure adding assembly to the cache: Attempt to install an assembly without a strong name”
??? d)強命名程序集的私有部署

例子

C:\Program Files\Microsoft Visual Studio 8\VC>gacutil -i F:\myweb\BalloonShop\Cl
assLibrary1\bin\Debug\ClassLibrary1.dll

在C:\WINDOWS\assembly將會看到ClassLibrary1,注冊成功

五、查看GAC文件內容以及將DLL復制出來

在項目中我們常常會引入第三方的dll,一般情況下我們都可以將所需的dll文件復制到硬盤上的一個地方,然后在項目中添加引用,這個操作很簡單!但有時候我們會遇到這樣的情況,就是所要引用的dll在目標機器的GAC里,這時我們就不能手動將它拷貝出來了。

????? 其實Windows的GAC是有對應的目錄的,一般來說為c:\Windows\assembly\,這個目錄有一些特殊,它里面存放的是本機已安裝和注冊的類庫dll,并且不允許用戶直接對其中的元素進行相關操作(如復制、剪切、粘貼、修改名稱等),不過你可以直接將另一位置的dll文件直接拖放到這個目錄下進行dll的安裝,但是我們不能直接將已經安裝進去的dll再拷貝出來。這里我將介紹一種方法來完成這個操作。

首先我們切換到Windows的命令行方式,即開始-運行-cmd-回車,然后轉到GAC所在的目錄,利用dir命令查看一下其中的內容,如下圖。

似乎可以明白GAC中的目錄結構了,基本上我們可以根據GAC目錄中的Processor Architecture列來區分dir的類型,例如我們要找的System.Web.Extensions屬于MSIL,在CMD方式下它應該就對應GAC_MSIL,然后切換到這個目錄下并dir。

看到我們要找的System.Web.Extensions程序集了,它也是一個dir,繼續切進去并dir。

這時只有一個目錄了,繼續切進去,然后dir就可以看到我們最終想要的dll文件了,然后通過copy命令將它復制出來就OK了!

小技巧:在CMD方式下使用命令時,如果要輸入的文件名或目錄名太長,可以先敲部分字符,然后通過Tab鍵自動補全,Windows的command工具會自動為你找到相匹配的內容!

六、例子

如上圖所示,新建了2個類庫文件:ClassLibrary1、ClassLibrary2

1、使用上面的第三點創建了強類型程序集ClassLibrary1,并且注冊到GAC中(可以使用上面第三點的方法,也可以使用反編譯器進行反編譯,可以查看到PublicKeyToken值。ClassLibrary2為null,ClassLibrary1為568e03e6162a7a2e)。

2、在DataAccess中引用ClassLibrary1、ClassLibrary2,編譯DataAccess。

3、進入DataAccess工程的bin\debug文件夾下,只有ClassLibrary2.dll與DataAccess.dll(沒有ClassLibrary1.dll)

由此可知:程序是從GAC中直接取得ClassLibrary1.dll的而不是從ClassLibrary1工程中將ClassLibrary1.dll拷貝到自身的debug中進行引用。

轉載于:https://www.cnblogs.com/zuiyirenjian/archive/2012/06/09/2543553.html

總結

以上是生活随笔為你收集整理的GAC及其作用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 色无极影院亚洲 | 好看的国产精品 | 一级免费a | 国产嫩草在线 | 精品乱子伦一区二区三区 | 能免费看18视频网站 | 久久久999国产精品 天堂av中文在线 | 久久av一区二区三区 | 午夜视频一区二区三区 | 97偷拍视频| 一卡二卡三卡在线视频 | 精产国品一二三产品蜜桃 | 久久一级大片 | 久久精品国产露脸对白 | 色综合视频在线 | 中文字幕在线观看免费 | ts人妖在线观看 | 午夜免费福利小视频 | 性欧美videos另类艳妇3d | 美女被艹视频网站 | 超级变态重口av番号 | 超碰综合在线 | 成人宗合 | 人人妻人人澡人人爽人人欧美一区 | 欧亚一区二区 | 性按摩玩人妻hd中文字幕 | 99黄色 | 免费的污网站 | 人妻激情偷乱频一区二区三区 | 色91视频 | 国模二区 | 亚洲成人黄色网址 | 91成人福利在线 | 亚洲一级片在线播放 | 亚洲综合小说 | 亚洲中文字幕无码爆乳av | 人与动物av| 成人免费毛片足控 | 久久aⅴ国产欧美74aaa | 奶水喷溅 在线播放 | 亚洲第一成年人网站 | 国产农村妇女精品一区 | 欧美精品四区 | 福利姬在线播放 | 最新av免费在线观看 | 麻豆传谋在线观看免费mv | jizz亚洲女人 | 青青草综合网 | 国产精品海角社区 | 国产免费小视频 | 久久精品国产亚洲av麻豆色欲 | 国产毛片久久久久久久 | 光明影院手机版在线观看免费 | 亚洲色图国产精品 | 超碰免费观看 | 9色在线视频 | 欧美一级黄视频 | 黄色伊人网 | 欧美aⅴ| 人乳videos巨大吃奶 | 在线亚洲+欧美+日本专区 | 免费精品在线 | 最新成人在线 | 小色瓷导航 | 亚洲九九色 | 在线中文字日产幕 | 欧美一区二区三区黄色 | 哈利波特3在线观看免费版英文版 | 热久久免费视频 | 日韩精品――色哟哟 | 丰满人妻av一区二区三区 | 国产黄色av片 | 日韩三级国产精品 | 色婷亚洲 | 一区二区三区色 | 国产1区 | 黄色av免费在线看 | 在线涩涩 | 老司机在线观看视频 | 中文字幕伊人 | 国产欧美综合一区 | 人人草人人插 | 日韩欧美国产精品综合嫩v 国产小毛片 | 日韩影视一区二区三区 | 成人28深夜影院 | 日本少妇18p | 波多野结衣网站 | 国产农村妇女精品一二区 | 五月天婷婷影院 | 91碰在线视频 | 久久毛片网站 | 午夜毛片| 丁香六月激情综合 | 日韩大片av | 我们的2018中文免费看 | 吊侵犯の奶水授乳羞羞漫画 | 国产精品美女久久久久 | 欧美在线xxx| 制中文字幕音影 |