成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

熱門話題VB.NET DLL搜索路徑經典講解

開發 后端
知道VB.NET DLL搜索路徑嗎?在這里給大家就VB.NET DLL搜索路徑的原理和概念上進行簡單的分析,希望可以給大家帶來幫助。

有些人都認為VB.NET DLL搜索路徑和VC一樣,什么Path路徑、系統路徑。但是其實它們是不一樣的。在網上收集了一些資料,現在我們來看看吧。我印象當中,VB.NET DLL搜索路徑要么是exe目錄,要么是GAC,要么是config文件指定的目錄。可惜config只能提供給exe使用,dll沒有cinfig。

托管模塊(Managed Module)
 
托管模塊是一個需要CLR才能執行的標準Windows可移植可執行(portable executable,簡稱PE)文件。

元數據(Metadata)
 
簡單的講,元數據就是一個數據表的集合,在這些表中,其中一些用于描述托管模塊中所定義的內容(比如所定義的類型和它們的成員),另外還有一些用于描述托管模塊中所引用的內容(比如被引用的類型和它們的成員)。

  1. URL: ms-help://MS.MSDN   
  2. QTR.2004APR.1033/cpguide/html/cpconmetadataoverview.htm   

程序集清單(Assembly Manifest)
程序集清單是另外一些元數據表的集合。這些表描述了組成程序集的文件,程序集所有文件中實現的公有導出類型,以及一些程序集相關的資源文件或數據文件。

  1. ms-help://   
  2. MS.MSDNQTR.2004APR.1033/cpguide/html/cpconAssemblyManifest.htm   

1.程序集(Assembly)的概念:
 
首先:程序集是一個或多個托管模塊,以及一些資源文件的邏輯組合。因為它是一個邏輯上的組合,所以程序集的邏輯表示和物理表示可以相互分離。如何將代碼和資源劃分到不同的文件中完全取決于我們。例如,我們可以將一些很少使用的類型或資源放在一個單獨的Assembly Module中,然后根據需要(比如第一次用到的時候),從web上下載它們。如果沒有用到,它們將不會被下載。這樣既節省磁盤空間,也減少了安裝時間。程序集允許我們將文件的部署分解開來,同時又將所有的文件看作一個單獨的集合。
其次:因為CLR是直接和程序集打交道的,所以程序集也是組件復用,以及實施安全策略和版本策略的最小單元(安全策略,版本信息等都只能是加在程序集上)。

注意:程序集是一個邏輯組合,它可以包含很多個文件。大多數程序集(比如使用Visual Studio.NET創建的那些)一般都是單文件程序集,也就是只有一個.exe或者.dll文件(目前.NET的程序集只有這兩種格式)。在這種情況下,程序集清單(manifest)直接嵌入到單文件程序集中。但是,你也可以用“程序集生成工具”(Al.exe)來創建多文件程序集。也可以只創建一個只包含清單的程序集。

2.強命名程序集(Strong Name Assembly)的概念

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

很明顯,簡單的用文件名來區分程序集是不夠的,CLR需要支持某種機制來唯一的標識一個程序集。這就是所謂的強命名程序集。 一個強命名程序集包含四個唯一標志程序集的特性:文件名(沒有擴展名),版本號,語言文化信息(如果有的話),公有秘鑰。 這些信息存儲在程序集的清單(manifest)中。清單包含了程序集的元數據,并嵌入在程序集的某個文件中。

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

  1. “MyType, Version=1.0.1.0,   
  2. Culture=neutralPublicKeyToken=bf5779af662fc055”   
  3. “MyType, Version=1.0.1.0,   
  4. Culture=en-us, PublicKeyToken=bf5779af662fc055”   
  5. “MyType, Version=1.0.2.0,   
  6. Culture=neturlPublicKeyToken=bf5779af662fc055”   
  7. “MyType, Version=1.0.2.0,   
  8. Culture=neutralPublicKeyToken=dbe4120289f9fd8a”    

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

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

3.如何創建強命名程序集(Strong Name Assembly)

創建一個強命名程序集首先需要獲得一個用強命名實用工具 (Strong Name Utility,即SN.exe,.NET SDK自帶)產生的密鑰。下面簡要介紹一下SN.exe的一些用法。 要產生一個公鑰/私鑰對:

a)SN –k MyCompany.Keys
該命名告訴SN.exe創建一個名為MyCompany.keys的文件。MyCompany.keys文件將包含以對以二進制格式存儲的公有密鑰和私有密鑰。

b)查看公有密鑰:
首先生成一個只包含公有密鑰的文件:

  1. SN –p   
  2. MyCompany.keys MyCompany.PublicKey  

然后用-tp參數查看:

創建好了公鑰/私鑰對,創建強命名程序集就很容易了。只需要把System.Reflection.AssemblyKeyFileAttribute特性加入到源代碼中就可以了:?[assembly:AssemblyKeyFile("MyCompany.keys")] 說明:公鑰/私鑰對文件的擴展名可以是任意的(也可以沒有),因為編譯的時候都是以元數據的格式讀取的。

  1. SN –tp MyCompany.PublicKeys   
  2. Public key is   
  3. 00240000048000009400000006020000002400005253413   
  4. 10004000001000100bb7214723ffc13901343df4b9c464ebf   
  5. 7ef4312b0ae4d31db04a99673e8163768cc0a2a7062e731d   
  6. beb83b869f0509bf8009e90db5c8728e840e782d2cf928dae   
  7. 35c2578ec55f0d11665a30b37f8636c08789976d8ee9fe9a5   
  8. c4a0435f0821738e51d6bdd6e6711a5acb620018658cce93   
  9. df37d7e85f9a0104a5845053995ce8   
  10. Public key token is 2dc940d5439468c2   

4.程序集的部署方式

一個程序集有兩種部署方式:
a)私有方式
和應用程序部署在同一目錄下的程序集稱作私有部署程序集。弱命名程序集只能進行私有部署。

b)全局方式
全局部署方式將程序集部署在一些CLR已確知的地方,當CLR搜索程序集時,它會知道到這些地方去找。強命名程序集既可以進行私有部署,也可以進行全局部署。

5.如何部署強命名程序集(Strong Name Assembly)和GAC

a)GAC的概念
如果一個Assembly要被多個應用程序訪問,那么他就必須放在一個CLR已確知的目錄下,并且CLR在探測到有對該Assembly的引用時,它必須能自動到該目錄下尋找這個程序集。這個已確知的目錄稱作GAC(Global Assembly Cache),就是全局程序集緩存。它一般位于下面的目錄下::\Windows\Assembly\GAC。
GAC的作用就是提供給CLR一個已知的確定的目錄去尋找引用的 程序集。

b)GAC的內部結構
GAC是一個特殊的結構化的目錄,用Windows Explorer瀏覽你會以為它只是一個包含很多程序集的普通目錄。其實不是這樣的,在命令行下查看,你會發現它實際上包含很多子目錄,子目錄的名字和程序集的名稱是相同的,但它們都不是實際的程序集,實際的程序集位于程序集名對應的目錄下。比如進入GCFWK子目錄,我們會發現其中又有很多的子目錄。 機器內每一個安裝到GAC的GCFWK.dll在GCFWK中都會有一個子目錄。

這里只 有一個目錄表明只有一個版本的GCFWK程序集被安裝。實際的程序集保存在每一個對應的版本目錄下。目錄的名稱以下劃線的形式分割為“(Version)_(Culture)_(PublicKeyToken)”。

【編輯推薦】

  1. VB.NET獲取硬盤信息四大法寶
  2. 講述VB.NET調用Excel的好處
  3. 簡單例子概述VB.NET新窗體
  4. 描述VB.NET工程轉換成步驟
  5. 自己動手實現VB.NET控件數組
責任編輯:田樹 來源: qqread
相關推薦

2009-10-23 15:35:42

VB.NET實用教程

2010-01-11 16:04:10

VB.NET使用wit

2009-10-20 10:16:24

VB.NET COMB

2010-01-18 18:20:49

VB.NET使用API

2009-10-13 14:42:30

VB.NET靜態成員

2009-10-14 17:21:47

VB.NET定制Win

2021-09-26 10:19:21

Kubernetes網絡安全網絡攻擊

2009-10-12 13:54:22

VB.NET Data

2009-10-23 13:10:14

VB.NET List

2009-10-15 11:42:05

VB.Net賦值語句

2009-10-29 17:33:51

VB.NET線程方法

2010-01-15 16:12:40

VB.NET調用DLL

2009-10-10 17:06:09

VB和VB.NET

2009-10-12 16:56:36

VB.NET常量VB.NET枚舉

2009-10-29 13:24:09

VB.NET Cons

2009-10-19 09:16:08

VB.NET語言

2009-10-26 12:39:09

VB.NET通信程序

2014-02-21 13:10:00

RSA大會RSA2014大會安全大會

2009-10-28 13:24:25

VB.NET文件

2009-11-10 16:20:25

VB.NET全局熱鍵
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩午夜电影在线观看 | 欧美精品在线免费观看 | 色爱综合| 精品国产久 | 涩涩视频网站在线观看 | 一级片免费在线观看 | 亚洲精选久久 | 免费人成在线观看网站 | 国产美女免费视频 | 国产在线精品一区二区 | 欧美久久久| 久久丁香| 午夜免费电影院 | 桃花av在线 | 午夜精品一区二区三区在线视 | 人人做人人澡人人爽欧美 | 黄色一级电影在线观看 | 亚洲精品综合一区二区 | 毛片a| 伊人久久免费视频 | 成人av资源在线 | 久久精品国产一区二区电影 | 国产三级 | 中文字幕在线看 | 国产精品视频偷伦精品视频 | 日韩在线观看 | av在线播放一区二区 | 国产一区二区精 | av中文字幕在线观看 | 精品自拍视频 | 成人精品国产一区二区4080 | 欧美黑人又粗大 | 毛片一级片 | 国产精品久久久久久久岛一牛影视 | 国产.com | 91视频91| 手机av免费在线 | 久久99精品久久久久 | 日韩精品免费在线 | 成人夜晚看av | 男女羞羞视频免费看 |