10/16/2013
1:37:00 PM 0

Strong-Named Assemblies 簡介

Strong Name 主要是為 .NET Framework 軟體組件開發者設計的一種機制, 除非是軟體公司, 一般使用者應該不太會用到這個功能

主要概念與使用方式,用故事的方式說明

1.Super軟體公司開發出一個超強函式庫, 並使用 Strong Name Compile 出 Super.dll

如何產生 Strong Name 的組件,
可參考 http://msdn.microsoft.com/en-us/library/8wxf689z.aspx
或在 Visual Studio 使用 Signing 功能
其概念就是利用憑證簽署的方式, 對 Super.dll 做簽署, 最大的好處就是檔案無法竄改

寫 ASP.NET 的開發者在 Web.config 一定有看過類似下面的字串
System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
PublicKeyToken 就是用來識別組件是否有效的一個資訊

另外組件要安裝到 GAC(Global Assembly Cache), Strong Name 是安裝的必要條件!!

2.Grace買了Super的函式庫,並且將這函式庫使用在開發專案中
引用後我們可以在 Visual Studio 看到 Properties 視窗 Strong name 屬性設定為 true

識別組件是否使用 Strong Name 的方法 http://blog.codingoutloud.com/2010/03/13/three-ways-to-tell-whether-an-assembly-dl-is-strong-named

3.Grace將專案開發完成,並計畫向客戶展示這超炫的功能, 不懷好意的同事Jeff想要破壞這次Demo, 因此換掉了Super.dll, 但是因為 Super.dll 有使用 Strong Name, Grace 的專案 Compile 後的執行檔內已有包含 Super.dll 的 Strong Name 資訊, 因此 Super.dll 如果被抽換掉, 程式一執行就會拋出 FileLoadException

例外狀況資訊:
    例外狀況型別: FileLoadException
    例外狀況訊息: 無法載入檔案或組件 'Super.Library, Version=2.0.0.0, Culture=neutral, PublicKeyToken=60016b5bca463827' 或其相依性的其中之一。 找到的組件資訊清單定義與組件參考不符。 (發生例外狀況於 HRESULT: 0x80131040)

總結
使用 Strong Name 可避免檔案被竄改, 並可確保更新版本來自同一廠商, 提高了安全性
廣義來看有助於避免 DLL Hell
可參考 http://www.iiiedu.org.tw/knowledge/knowledge20021130_1.htm
http://msdn.microsoft.com/en-us/library/ms973843.aspx

0 comments:

Post a Comment