操作說明:使用強式名稱簽署組件
注意
雖然 .NET Core 支援強式名稱組件,而且 .NET Core 程式庫中的所有組件都經過簽署,但大部分的協力廠商組件都不需要強式名稱。 如需詳細資訊,請參閱 GitHub 上的 強式名稱簽署 (英文)。
以下是幾種以強式名稱簽署組件的方式:
- 在 Visual Studio 專案的專案設計工具中,使用[建置]>[強式命名] 頁面。 這是最簡單、最方便以強式名稱簽署組件的方式。
- 透過使用組件連結器 (Al.exe) 將 .NET Framework 程式碼模組 (.netmodule 檔) 與金鑰檔連結在一起。
- 使用組件屬性將強式名稱資訊插入您的程式碼。 您可以使用 AssemblyKeyFileAttribute 或 AssemblyKeyNameAttribute 屬性,視使用的金鑰檔所在位置而定。
- 使用編譯器選項。
您必須使用密碼編譯金鑰組將組件簽署為強式名稱。 如需建立金鑰組 (Key Pair) 的詳細資訊,請參閱如何:建立公開/私密金鑰組。
使用 Visual Studio 建立組件並以強式名稱簽署組件
- 在 方案總管中,開啟專案的捷徑功能表,然後選擇 [屬性] 。
- 在 [建置] 索引標籤下,您會看到 [強式命名] 節點。
- 選取 [簽署組件] 核取方塊以展開選項。
- 選取 [瀏覽] 按鈕以選擇 [強式名稱金鑰檔案] 路徑。
注意
若要延遲簽署組件,請選擇公開金鑰檔案。
使用組件連結器建立組件並以強式名稱簽署組件
開啟 Visual Studio 開發人員命令提示字元或 Visual Studio Developer PowerShell,然後輸入下列命令:
al /out:<assemblyName><moduleName> /keyfile:<keyfileName>
其中:
- assemblyName 是組件連結器將發出的強式簽署組件名稱 (.dll 或 .exe 檔)。
- moduleName 是 .NET Framework 程式碼模組 (.netmodule 檔) 的名稱,其中包括一或多個類型。 您可以在 C# 或 Visual Basic 中使用
/target:module
參數編譯程式碼,藉此建立 .netmodule 檔。 - keyfileName 是包含金鑰組的容器或檔案名稱。 組件連結器會解譯與目前目錄關聯的相對路徑。
下列範例將使用金鑰檔 sgKey.snk 以強式名稱簽署組件 MyAssembly.dll。
al /out:MyAssembly.dll MyModule.netmodule /keyfile:sgKey.snk
如需這項工具的詳細資訊,請參閱 組件連結器。
使用屬性以強式名稱簽署組件
將 System.Reflection.AssemblyKeyFileAttribute 或 AssemblyKeyNameAttribute 屬性加入至您的原始程式碼檔,並指定容器或檔案名稱,其中包含以強式名稱簽署組件時所使用的金鑰組。
以一般方式編譯原始程式碼檔。
注意
C# 和 Visual Basic 編譯器在原始程式碼中遇到 AssemblyKeyFileAttribute 或 AssemblyKeyNameAttribute 屬性時,會發出編譯器警告 (分別為 CS1699 和 BC41008)。 您可以忽略這些警告。
下列範例將搭配稱為 keyfile.snk 的金鑰檔使用 AssemblyKeyFileAttribute 屬性,這個金鑰檔位於編譯組件所在的目錄中。
[assembly:AssemblyKeyFileAttribute("keyfile.snk")];
[assembly:AssemblyKeyFileAttribute("keyfile.snk")]
<Assembly:AssemblyKeyFileAttribute("keyfile.snk")>
您也可以在編譯原始程式檔時延遲簽署組件。 如需詳細資訊,請參閱延遲簽署組件。
使用編譯器以強式名稱簽署組件
在 C# 和 Visual Basic 中使用 /keyfile
或 /delaysign
編譯器選項,或是在 C++ 中使用 /KEYFILE
或 /DELAYSIGN
連結器選項編譯原始程式碼檔。 在選項名稱後面加上冒號和金鑰檔的名稱。 使用命令列編譯器時,您可以將金鑰檔複製到包含您的原始程式碼檔的目錄中。
如需延遲簽署的詳細資訊,請參閱延遲簽署組件。
下列範例將使用 C# 編譯器,並且使用金鑰檔 sgKey.snk 以強式名稱簽署 UtilityLibrary.dll 組件。
csc /t:library UtilityLibrary.cs /keyfile:sgKey.snk