如何:使用强名称为程序集签名

更新:2007 年 11 月

Windows 软件开发工具包 (SDK) 提供了多种方法来使用强名称为程序集签名:

  • 使用 Windows SDK 提供的程序集链接器 (Al.exe)

  • 使用程序集属性将强名称信息插入代码中。您可以使用 AssemblyKeyFileAttributeAssemblyKeyNameAttribute,这取决于要使用的密钥文件所在的位置。

    说明:

    在 .NET Framework 2.0 版中,有些编译器会在参数已被使用时发出警告消息。

  • 使用诸如 C# 和 Visual Basic 中的 /keyfile 或 /delaysign 编译器选项,或者 C++ 中的 /KEYFILE 或 /DELAYSIGN 链接器选项。(有关延迟签名的信息,请参见延迟为程序集签名。)

说明:

在 Visual Studio 2005 中,开发环境会提供用于对程序集签名的工具。请参见管理程序集签名和清单签名“项目设计器”->“签名”页

要使用强名称为程序集签名,必须具有加密密钥对。有关创建密钥对的更多信息,请参见如何:创建公钥/私钥对

使用“程序集链接器”创建程序集并为其签署强名称

  • 在命令提示处,键入下列命令:

    al /out:<assembly name> <module name> /keyfile:<file name>

    在此命令中,assembly name 是要使用强名称签名的程序集的名称,module name 是用于创建程序集的代码模块的名称,file name 是包含密钥对的容器或文件的名称。

下面的示例使用密钥文件 sgKey.snk 为程序集 MyAssembly.dll 签署强名称。

al /out:MyAssembly.dll MyModule.netmodule /keyfile:sgKey.snk

使用属性为程序集签署强名称

  • 在代码模块中,添加 AssemblyKeyFileAttributeAssemblyKeyNameAttribute,指定在使用强名称为程序集签名时要用到的密钥对所在的文件或容器的名称。

下面的代码示例使用具有名为 sgKey.snk 的密钥文件(位于编译程序集的目录中)的 AssemblyKeyFileAttribute。这假设该程序集是使用命令行编译器 vbc.exe 和 csc.exe 编译的。

<Assembly:AssemblyKeyFileAttribute("sgKey.snk")>
[assembly:AssemblyKeyFileAttribute(@"sgKey.snk")]
说明:

在诸如 Visual Studio 这样的开发环境中,程序集可能不是在项目目录中编译的。例如,有些版本的 Visual Studio 在 bin\Debug 子目录中编译 C# 项目。在该情况下,代码示例中路径将为“..\\..\\sgKey.snk”。在 Visual Studio 2005 中,用于 C# 的密钥文件可以在项目设置中指定。

在编译时也可延迟为程序集签名。有关更多信息,请参见延迟为程序集签名

当使用强名称对程序集进行签名时,程序集链接器 (Al.exe) 查找与当前目录和输出目录相关的密钥文件。当使用命令行编译器时,只需将密钥复制到包含代码模块的当前目录即可。

请参见

任务

如何:创建公钥/私钥对

概念

延迟为程序集签名

参考

“项目设计器”->“签名”页

其他资源

创建和使用具有强名称的程序集

管理程序集签名和清单签名