如何:创建公钥/私钥对

更新:2007 年 11 月

要使用强名称为程序集签名,必须具有公钥/私钥对。这一对加密公钥和加密私钥用于在编译过程中创建强名称程序集。您可以使用强名称工具 (Sn.exe) 来创建密钥对。密钥对文件通常具有 .snk 扩展名。

说明:

在 Visual Studio 2005 中,通过 C#、Visual Basic 和 Visual J# 集成开发环境 (IDEs) 可以生成密钥对,并且无需使用 Sn.exe 创建密钥对即可对程序集进行签名。以上 IDE 在“项目设计器”中具有“签名”选项卡。使用 Visual C++ IDE 可以在“属性页”窗口“配置属性”部分的“链接器”部分中,在“高级”属性页中指定一个现有密钥文件的位置。通过 AssemblyKeyFileAttribute 标识密钥文件对的用法在 Visual Studio 2005 中已过时。

创建密钥对

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

    sn –k <file name>

    在此命令中,“文件名”是包含密钥对的输出文件的名称。

下面的示例创建名为 sgKey.snk 的密钥对。

sn -k sgKey.snk

如果您需要延迟对程序集签名并控制整个密钥对(密钥对不太可能在测试方案之外),可使用以下命令生成密钥对,然后从中将公钥提取到一个单独的文件中。首先,创建密钥对:

sn -k keypair.snk
  • 下一步,从密钥对中提取公钥,并将其复制到一个单独的文件中:
sn -p keypair.snk public.snk
  • 创建密钥对之后,必须将文件放在强名称签名工具可以找到的位置。

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

如果使用的是 Visual Studio 的早期版本,在项目属性中没有“签名”选项卡,则建议的密钥文件位置为按如下所示指定了文件属性的项目目录:

<Assembly: AssemblyKeyFileAttribute("..\..\key.snk")>
[assembly: AssemblyKeyFileAttribute(@"..\..\key.snk")]

请参见

其他资源

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