可通过许多方法为程序集签署强名称:
-
在 Visual Studio 中,通过使用项目的“属性”对话框中的“签名”选项卡。 这是为程序集签署强名称的最简单且最方便的方法。
-
通过使用程序集链接器 (Al.exe) 将 .NET Framework 代码模块(.netmodule 文件)与密钥文件链接。
-
通过使用程序集特性将强名称信息插入代码中。 你可以使用 AssemblyKeyFileAttribute 或 AssemblyKeyNameAttribute 特性,具体取决于要使用的密钥文件所在的位置。
-
通过使用编译器选项。
一、使用 Visual Studio 创建程序集并为程序集签署强名称
- 在“解决方案资源管理器”中,打开项目的快捷菜单,然后选择“属性”。
- 选择“签名”选项卡。
- 选择“为程序集签名”框。
- 在“选择强名称密钥文件”框中,选择“<浏览…>”,然后导航到该密钥文件。 若要创建新的密钥文件,请选择“<新建…>”,然后在“创建强名称密钥”对话框中输入其名称。
二、使用程序集链接器创建程序集并为程序集签署强名称
-
在 Visual Studio 命令提示符处,键入以下命令:
al /out:<assemblyName> <moduleName> /keyfile:<keyfileName>
其中:
- assemblyName
-
程序集链接器将发出的强签名的程序集的名称(.dll 或 .exe 文件)。
- moduleName
-
包含一个或多个类型的 .NET Framework 代码模块的名称(.netmodule 文件)。 可以通过在 C# 或 Visual Basic 中使用/target:module 开关编译代码来创建 .netmodule 文件。
- keyfileName
-
包含密钥对的容器或文件的名称。 程序集链接器解释与当前目录相关的相对路径。
下面的示例使用密钥文件 MyAssembly.dll 为程序集 sgKey.snk 签署强名称。
al /out:MyAssembly.dll MyModule.netmodule /keyfile:sgKey.snk
三、使用特性为程序集签署强名称
-
将 System.Reflection.AssemblyKeyFileAttribute 或 AssemblyKeyNameAttribute 特性添加到源代码文件中,并指定包含为程序集签署强名称时要使用的密钥对的文件或容器的名称。
2. 通常会编译源代码文件。
[assembly:AssemblyKeyFileAttribute("keyfile.snk")]
使用编译器为程序集签署强名称
-
使用 C# 和 Visual Basic 中的 /keyfile 或 /delaysign 编译器选项,或使用 C++ 中的 /KEYFILE 或 /DELAYSIGN 链接器选项编译源代码文件。 在选项名称后,添加冒号和密钥文件的名称。 使用命令行编译器时,你可以将密钥文件复制到包含源代码文件的目录中。
有关延迟签名的信息,请参阅 延迟为程序集签名。
下面的示例使用 C# 编译器并借助密钥文件 UtilityLibrary.dll 为程序集 sgKey.snk 签署强名称。
csc /t:library UtilityLibrary.cs /keyfile:sgKey.snk