Managed 應用程式的強式名稱簽章
強式名稱簽章 (又稱為強式命名) 提供軟體元件全域唯一的識別,其他人無法對此進行詐騙。 強式名稱可用來保證,元件相依性和組態陳述式會對應至完全正確的元件和元件版本。
強式名稱 (Strong Name) 是由組件的識別 (簡單的文字名稱、版本號碼及文化特性資訊) 加上公開金鑰語彙基元和數位簽章所組成的。
對於 Visual C# 和 Visual Basic 專案,Visual Studio 會透過 [專案設計工具] 中的 [簽章] 窗格啟用強式命名,請參閱專案設計工具、簽署頁。
對於 Visual C++ 專案,您可以使用連結器 (Linker) 選項來簽署組件,請參閱強式名稱組件 (組件簽署) (C++/CLI)。
使用強式命名的原因
強式命名提供應用程式或元件的唯一識別,其他軟體可以用它明確參考應用程式或元件。 例如,強式命名可以讓應用程式作者和系統管理員指定精確的服務版本,以使用於共用元件。 這麼做可以讓不同的應用程式指定不同版本,而不會影響其他應用程式。 此外,您可以將元件的強式名稱當做安全性舉證來使用,在兩個元件之間建立信任關係。
何者可以強式命名
您可以為 .NET Framework 組件和 XML 資訊清單強式命名。 這些需求包括下列各項:
應用程式組件 (.exe)
應用程式資訊清單 (.exe.manifest)
部署資訊清單 (.application)
共用元件的組件 (.dll)
何者應該強式命名
共用的 DLL 應該強式命名。 不論 DLL 是否將會部署至全域組件快取,當 DLL 不是應用程式的私用實作細節,而是可供一個以上的應用程式使用的一般服務時,建議使用強式名稱。
何者必須強式命名
您必須為下列各項強式命名:
DLL,如果要部署至全域組件快取 (GAC)。
ClickOnce 應用程式和部署資訊清單。 根據預設,Visual Studio 專案系統會為 ClickOnce 部署的應用程式啟用這個選項。
用於 COM 互通性的主要 Interop 組件。 從 COM 型別程式庫建立主要 Interop 組件時,TLBIMP 公用程式會強制使用強式命名。
何者不應該強式命名
一般而言,應該避免為應用程式 EXE 組件強式命名。 強式命名的應用程式或元件無法參考弱式命名的元件。 因此,強式命名的 EXE 會使 EXE 無法參考和應用程式一起部署的弱式命名 DLL。
因此,Visual Studio 專案系統不會為應用程式 EXE 強式命名。 相反地,它會為應用程式資訊清單強式命名,此應用程式資訊清單會從內部指向弱式命名的應用程式 EXE。
此外,您需要避免為對您的應用程式而言為私用的元件強式命名。 在這個情況下,強式命名可能更加難以管理相依性,並且增加私用元件不必要的負荷。
如何指派強式名稱
在 Visual Studio 中,請使用 [專案設計工具] 的 [簽章] 窗格,為應用程式或元件強式命名。 [簽章] 窗格支援兩種強式命名的方法:使用強式名稱金鑰檔,或使用金鑰提供者。 如需簽署資訊清單的詳細資訊,請參閱 HOW TO:簽署應用程式和部署資訊清單。如需建立強式名稱金鑰檔 (.snk) 的詳細資訊,請參閱 HOW TO:建立公開/私密金鑰組。
使用金鑰檔的方法時,可以使用現有的金鑰檔,或建立新的金鑰檔。 您應該永遠使用密碼保護金鑰檔,以防止其他人使用此檔案。
金鑰提供者或憑證存放區提供了另一個保護強式名稱金鑰的方法。 部分金鑰提供者使用智慧卡,用來驗證識別,並防止金鑰遭竊取。
更新強式命名的元件
只將新版本複製到舊版本上,無法服務或升級強式名稱的元件。
您只要將新版本複製至應用程式目錄中,即可更新應用程式目錄中弱式命名的 DLL。 Common Language Runtime (CLR) 會載入任何實際存在的版本。
對於強式名稱的 DLL,您必須重新編譯整個應用程式,讓所有的組件參考都指向新版本,或是必須更新應用程式的 .config 檔案,以指示執行階段載入新版本,而不是舊版本。
雖然強式命名的元件需要執行較多的維護工作,但優點在於應用程式可以非常明確地指示在執行階段所需要的其他元件版本。