第 3 章 共享程式集和強命名程式集

2022-02-06 14:27:47 字數 1330 閱讀 1358

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

CLR 共享程式集和強命名程式集

2017年08月12日 23 36 52 生活常識 閱讀數 187 clr支援兩種型別的程式集 弱命名程式集 weakly named assembly 和強命名程式集 strongly named assembly 二者的區別 強命名程式集使用發布者的公鑰 私鑰進行了簽名。這一堆金鑰允許對程式集進...

CLR via C 共享程式集和強命名程式集

基礎知識 如下所示 1.要想將型別從乙個程式集移動到另乙個程式集而不造成應用程式中斷,可以使用system.runtime.compilerservices.typeforwardedtoattribute特性在舊的程式集中傳入新程式集中該型別的字串,然後在新的程式集中傳入舊程式集中該型別的字串。建...

第三章 共享程式集和強命名程式集

由檔名 不記副檔名 版本號,語言文化標示,公鑰組成.如 mytypes,version 1.0.8123.0,culture netural,publickeytoken b77a5ac55 system.reflection.assemblyname輔助類,可獲取和設定有關程式集的這些資訊.sn ...