[From 3.1~3.4]
阿新 • • 發佈:2018-12-28
一.CLR支援兩種程式集:弱命名程式集(weakly named assembly)和強命名程式集(strongly named assembly).
兩種部署方式:私有或全域性
私有:私有部署的程式集是指部署到應用程式基目錄或者某個子目錄的程式集。
全域性:全域性部署的程式集是指部署到一些公認位置的程式集。
GUID(Globally Unique Identifier,全域性唯一識別符號),
URL(Uniform Resource Locator,統一資源定位符)
URN(Uniform Resource Name,統一資源名稱)
二.建立強命名程式集
1.使用.NET Framework SDK 和Microsoft Visual Studio隨帶的Strong Name實用程式(SN.exe)獲取金鑰。
命令列:SN -k MyCompany.snk
這告訴SN.exe建立MyCompany.snk。
另,下面時檢視公鑰的方法分兩步
SN -p MyCompany.snk MyCompany.PublicKey sha256(建立直喊公鑰的檔案MyCompany.PublicKey,sha256是演算法名字)
SN -tp MyCompany.PublicKey(傳遞只含公鑰的檔案)
2.建立強簽名程式集
csc /keyfile:MyCompany.snk Program.cs
C#編譯器看到這個開關會開啟制定檔案(MyCompany.snk),用私鑰對程式集進行簽名,並將公鑰嵌入清單。
注意只能對含清單的程式集檔案進行簽名:程式集其他檔案不能被顯式簽名。
三.全域性程式集快取(一定是強命名程式集)
由多個應用程式訪問的程式集必須放到公認的目錄,而且CLR在檢測到對該程式集的引用時,必須知道檢查該目錄。這個公認位置就是
全集程式集快取(Global Assembly Cache,GAC)。GAC的具體位置是一種實現細節,不同版本會有所變化。但是,一般能在一下目錄發現它:
%SystemRoot%\Microsoft.NET\Assembly
GAC目錄式結構化的:其中包含許多子目錄,子目錄名稱用演算法生成。
不要直接將程式集手動複製到GAC目錄;要用工具完成這件事情。開發和測試在GAC中安裝強命令程式集最常用的工具是GACUtil.exe。如果直接執行,不新增任何命令列引數,就會自動顯示用法:
四.在生成的程式集中引用強命名程式集
若使用csc.exe的/reference開關想引用的程式集檔名
如果檔名時完整路徑,則會載入指定檔案,並根據它的元資料生成程式集。
如果不包含路徑的檔名,csc.exe會嘗試一下目錄查詢程式集(按所列順序)
1.工作目錄。
2.csc.exe所在目錄,目錄中還包含CLR的各種DLL檔案,
3.使用/lib編譯器開關指定的任何目錄。
4.使用LIB環境變數指定的任何目錄
安裝.Net Framework時,實際安裝Micrsoft 的程式集的兩套拷貝
1.編譯器的CLR目錄
用處:方便生成程式集
特點:1.不依賴機器(只包含元資料)
2.GAC的子目錄
用處:方便執行時載入程式集
特點(同時包含元資料和IL程式碼)