第 3 章 共享程序集和强命名程序集
3.1 節 兩種程序集,兩種部署
CLR 支持兩種程序集:弱命名程序集(weakly named assembly,即無簽名的程序集) 和 強命名程序集(strongly named assembly,即帶簽名的程序集)。
兩者程序集結構完全相同。兩者區別在于,強命名程序集使用發布者的公鑰/私鑰進行了簽名。這一對密鑰允許對程序集進行唯一性的標識、保護和版本控制,并允許程序集部署到用戶機器的任何地方,甚至可以部署到Internet上。
程序集有兩種部署方式:私有和全局。
[1] 私有部署:部署到應用程序基(根)目錄或者某個子目錄的程序集。
[2] 全局部署:全局部署是指部署到一些公認位置的程序集。
CLR 在查找程序集時,會檢查這些位置。
注意:
[1] 弱命名程序集只能以私有方式部署;強命名程序集既可私有部署,也可全局部署。
[2] 私有部署中的子目錄分兩種:一是基目錄下建與程序集文件同名的目錄(極少數程序集可用,因為每個程序集對應一個子目錄);二是子目錄由 XML 配置文件的 probing 元素的 privatePath 特性指定(可將多個程序集文件指定到一個子目錄)。
?
3.2 節 為程序集分配強名稱
強命名程序集具有四個重要特性,共同組成唯一性標識:文件名(不計擴展名)、版本號、語言文化、公鑰。由于公鑰數字很大,所以常用從公鑰派生的小哈希值,公鑰標記(public key token),即公鑰的64位哈希值的最后8個字節。程序集標識字符串(程序集顯示名稱),實例如下:
"System.Management, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"
注:可使用 System.Reflection.AssemblyName 構造程序集名稱,并獲取程序集名稱的各個組成部分。標識的程序集文件可為 .exe 或 .dll 文件。
在 VS 中新建公鑰/私鑰文件,右鍵項目 → 屬性 → 簽名 → 勾選“為程序集簽名(A)” → 然后從“選擇強名稱密鑰文件”選擇框中選擇“<新建...>”。
3.3 節 全局程序緩存
全局部署的公認位置就是全局程序集緩存(Global Assembly Cache, GAC)。GAC的具體位置不同版本會有所變化。,一般在 "?%SystemRoot%\Microsoft.NET\Assembly "。
GAC 目錄是結構化的:其中包含許多子目錄,子目錄名稱用算法生成。永遠不要將程序集文件手動復制到 GAC 目錄;相反,要用工具完成這項任務。工具知道GAC的內部結構,并知道如何生成正確的子目錄名??捎?GACUtil.exe 。
3.4 在生成的程序集中引用強命名程序集
安裝.NET Framework 時,實際會安裝 Microsoft 的程序集文件的兩套拷貝。一套安裝到編譯器/CLR
?
轉載于:https://www.cnblogs.com/xinaixia/p/5856823.html
總結
以上是生活随笔為你收集整理的第 3 章 共享程序集和强命名程序集的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python,面向对象的各种方法
- 下一篇: 11.编写一个Java程序,计算半径为3