这要求公钥在开发过程中可用。
您可以在生成时使用延迟签名或部分签名,在可迁移可执行 (PE) 文件中为强名称签名保留空间,但要将实际签名延迟至后面某些阶段(通常就在传送程序集之前)。
下面的步骤说明了延时对程序集签名的过程:
-
此密钥通常是 .snk 文件的形式,使用 Windows 软件开发包 (SDK) 提供的强名称工具 (Sn.exe) 可创建此文件。
-
使用 System.Reflection 中的两种自定义特性来批注程序集的源代码:
-
AssemblyKeyFileAttribute,它将包含公钥的文件的名称作为参数传递给其构造函数。
-
例如:
[assembly:AssemblyKeyFileAttribute("myKey.snk")] [assembly:AssemblyDelaySignAttribute(true)]
-
-
真正的公钥必须在生成程序集时存储,以便引用此程序集的其他程序集可获取密钥以存储在它们自已的程序集引用中。
-
您可以将“强名称”工具与 –Vr 选项一起使用来执行此操作。
myAssembly.dll 的程序集的验证。
sn –Vr myAssembly.dll
myAssembly.dll的注册键文件。
sn –Vk myRegFile.reg myAssembly.dll
使用 –Vr 或 –Vk 选项,则可选择可以包括测试键签名的 .snk 文件。
小心
这使恶意程序集也可以跳过验证。
说明
这是因为,在从命令行运行程序集时,实时 (JIT) 编译器会将程序集编译为 64 位本机代码;在将程序集加载到设计时环境中时,实时 (JIT) 编译器会将程序集编译为 32 位本机代码。
-
以后,通常是在即将交付前,将程序集提交给组织的签名机构,以便与“强名称”工具一起使用 –R 选项来实际进行强名称签名。
myAssembly.dll 的程序集签署强名称。
sn -R myAssembly.dll sgKey.snk