[ZZ]强签名的由来和作用
在網上,看到很多初學.NET的網友經常問,強簽名是什么,它的作用是什么?一句話,強簽名就是唯一標識一個Assembly文件的名稱。它由Assembly的文件名、版本號、區域信息、公鑰信息和處理器架構信息組成,這樣做是為了避免以前Windows里面的DLL HELL問題。
在強名以前,如果一個DLL升級覆蓋了老版本的DLL,有可能會導致系統里面一些依賴老版本的DLL程序出現兼容型的問題。這是因為新版本里面可能將老版本DLL的一些函數的實現方法改變—為了修復一些Bug,因此強簽名就將程序的版本信息作為唯一標識Assembly的一部分。
而.NET又因為歷史原因,在開發的時候由于PC還沒有64位的處理器可以使用,因此雖然.NET程序編譯成MSIL中間代碼以后,CLR可以根據所運行的機器的處理器架構生成對應的代碼。但是還是有一些Assembly模塊是依賴于指定平臺的,例如CustomMarshalers.dll,這個DLL調用了一些unsafe代碼,里面有一些指針操作,因此這個dll是依賴于指定平臺的。因此在2.0的.NET以后,強簽名就將程序所依賴的處理器信息也作為其一部分。
另外由于很多公司都需要開發國際化軟件產品,一般希望只保留一份代碼,然后將代碼里面用到的字符串放到其他Assembly里面?—?這個Assembly叫做資源Assembly。在代碼Assembly使用字符串的時候,只要指定字符串在資源Assembly對應的標識符,在做本地化的時候,軟件發布廠商只需要為需要支持的語言添加對應的資源Assembly就可以了。比如mscorlib.dll里面會扔出很多的異常,為了能為不同國家的.NET用戶顯示本地化的異常消息,mscorlib.dll將所有異常消息都提取到資源Assembly里面,因此你會看到系統里面安裝了mscorlib.en-us.dll,mscorlib.zh-cn.dll等等。使用.NET的ResourceManager類可以根據字符串標識符將資源Assembly里面對應的字符串和其他資源(有些圖片也需要本地化,例如改變圖片上的文字)提取出來,因此強簽名就將程序支持的區域信息作為它的一部分。
組件發布了以后,如何想其他人證明組件就是你發布的?例如在下圖的例子中,張三和黑客的程序都發布給王二,兩個程序都聲稱自己是張三提供的,王二如何區別哪個才是真的張三呢?
?
?
因此我們有了數字簽名這個解決方案,在下圖的例子中:
?
?
因此公鑰作為強簽名的一部分就不是很奇怪了。
轉自:http://blog.csdn.net/Donjuan/archive/2009/02/02/3859136.aspx
轉載于:https://www.cnblogs.com/wk23415/archive/2011/04/06/2006436.html
總結
以上是生活随笔為你收集整理的[ZZ]强签名的由来和作用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用DTS将 SQLServer 导出到
- 下一篇: firefox扩展开发(四) : 更多的