建立和使用強式名稱的組件

強式名稱 (Strong Name) 是由組件的識別 (Identity),也就是其簡單文字名稱、版本號碼及文化特性資訊 (如果有提供),加上公開金鑰和數位簽章所組成的。 這是使用對應的私密金鑰,從組件檔案所產生 (組件檔案包含附屬組件資訊清單,而資訊清單則包含組件中所有檔案的名稱和雜湊)。

警告

請勿依賴強式名稱提供安全性。 強式名稱僅提供唯一識別。

強式名稱的組件只可使用來自其他強式名稱組件的類型。 否則,強式名稱組件的完整性會受到危害。

注意

雖然 .NET Core 支援強式名稱組件,而且 .NET Core 程式庫中的所有組件都經過簽署,但大部分的協力廠商組件都不需要強式名稱。 如需詳細資訊,請參閱 GitHub 上的 強式名稱簽署 (英文)。

強式名稱案例

下列案例概述處理序如何使用強式名稱簽署組件,然後再使用該名稱參考該組件。

  1. 組件 A 是以下列方法之一,使用強式名稱所建立:

    • 使用支援建立強式名稱的開發環境,例如 Visual Studio。

    • 使用強式名稱工具 (Sn.exe) 建立密碼編譯金鑰組,並使用命令列編譯器或組件連結器 (Al.exe) 將該金鑰組指派給組件。 Windows SDK 提供 Sn.exe 與 Al.exe。

  2. 開發環境或工具會使用開發人員的私密金鑰簽署檔案雜湊,而該檔案中包含組件的資訊清單。 此數位簽章儲存在可攜式執行檔 (PE) 中,而該檔案包含組件 A 的 資訊清單。

  3. 組件 B 是組件 A 的消費者。組件 B 的資訊清單參考區段包含代表組件 A 公開金鑰的語彙基元。 語彙基元是完整公開金鑰的一部分,會取代金鑰本身來節省空間。

  4. 當組件放在全域組件快取時,Common Language Runtime 會驗證強式名稱簽草章。 Common Language Runtime 在執行階段以強式名稱繫結時,會比較儲存在組件 B 資訊清單的金鑰,以及用來產生組件 A 強式名稱的金鑰。若通過 .NET 安全性檢查且繫結成功,組件 B 就能保證組件 A 的位元未遭竄改,而且這些位元確實來自組件 A 的開發人員。

注意

此案例無法解決信任問題。 除了強式名稱之外,組件能夠包含完整的 Microsoft Authenticode 簽章。 Authenticode 簽章包含建立信任的憑證。 請務必注意,強式名稱不會要求程式碼以這種方式簽署。 強式名稱僅提供唯一身分識別。

略過信任組件的簽章驗證

從 .NET Framework 3.5 Service Pack 1 開始,當組件載入到完全信任的應用程式網域 (例如適用於 MyComputer 區域的預設應用程式網域) 時,不會驗證強式名稱簽章。 這是指強式名稱略過功能。 在完全信任環境中,不論簽章為何,已簽署、完全信任的組件要求 StrongNameIdentityPermission 一律會成功。 強式名稱略過功能可以避免在這種狀況中不必要的額外負荷,也就是完全信任組件的強式名稱簽章驗證,讓組件能夠更快載入。

略過功能適用於任何以強式名稱簽署並具有下列特性的組件:

個別應用程式或電腦可停用此功能。 請參閱如何:停用強式名稱略過功能

標題 描述
如何:建立公開/私密金鑰組 描述如何建立簽署組件的密碼編譯金鑰組。
操作說明:使用強式名稱簽署組件 描述如何建立強式名稱組件。
增強的強式命名 描述 .NET Framework 4.5 中強式名稱的增強項目。
如何:參考以強式名稱命名的組件 描述如何在編譯或執行階段期間,參考以強式名稱命名之組件中的類型或資源。
作法:停用強式名稱略過功能 描述如何停用會略過強式名稱簽章驗證的功能。 所有應用程式皆可停用此功能,也可以只停用特定應用程式中的此功能。
建立組件 提供單一檔案和多檔案組件的概觀。
如何在 Visual Studio 中延遲簽署組件 說明如何在建立組件之後,使用強式名稱簽署組件。
Sn.exe (強式名稱工具) 描述 .NET Framework 中可協助使用強式名稱來建立組件的工具。 這個工具提供了金鑰管理、簽章產生和簽章驗證的選項。
Al.exe (組件連接器) 描述 .NET Framework 中可產生檔案的工具,而該檔案具有來自模組或資源檔案組件的資訊清單。