???????? 引言:
???????????????? 在曾經的項目開發中,在程序集中見到過一個后綴為*.snk的文件。當時看這個文件的圖標。感覺可能是企業內部保護版權啥的一種方式。
? 一,強程序集攻克了哪些問題?
1,唯一標識一個程序集
2,放置程序集被仿冒和被篡改。
3,能夠部署到全局程序集緩存(GAC:GlobalAssembly Cache)中;在將強名稱程序集不熟在GAC其中以后,強名稱程序集也能夠稱為共享程序集(shared assembly)
二,強名稱與GAC
????????
強名稱:
定義了一個規則,不單單以文件名稱來區分程序集,這個規則就是強名稱。
?
GAC:
定義一個特殊的目錄,這個目錄能夠識別這樣的規則。而且同意文件名稱同樣的文件存在,這個特殊的目錄就是GAC。
三,為程序集賦予強名稱
???????? 打開VS 開發者命令提示工具:
????????????? 首先,我們來創建公鑰私鑰文件。使用 sn -k命令:
?????????????
???????? 然后我們會發如今此目錄下創建LHC.snk成功:
???????????
須要注意的地方:
1。每次調用sn時候,創建的私鑰/密鑰對文件都不同樣,不僅自己的計算機每次生成的不同,其它全部計算機生成的也不同樣。
2。關于這個文件的命名。假設是個人。能夠以自己的名字命名。假設是團隊。。組織火公司,能夠以組織名稱來命名。
3,在大多數情況下,個人和組織僅僅須要一個snk文件就能夠了。以后創建強名稱的時候,都使用這個snk文件。因為會使用snk文件的私鑰對強名稱程序集進行簽名,因此這個文件必須嚴密保護。
?
上面創建的LHC.snk里面既包括公鑰。也包括私鑰。
公鑰能夠使用sn.exe查看。可是私鑰無法查看。
??? 假設須要查看公鑰的話。能夠使用 sn -p命令:
????
????? 之后使用sn -tp命令查看*.pk文件:
?????
???? 創建好這個公鑰私鑰文件之后,我們就能夠使用它來標識程序集的唯一性了。
? ?? 在須要設置的程序集中,為此程序集設置簽名屬性:
????????
?????? 保存之后再觀察此程序集,會發現多出來一個文件:
??????