程序开发中的延迟签名与异常处理
1. 延迟签名
在程序开发中,公司需要谨慎保管其公钥/私钥对中的私钥。若不可信人员获取私钥,他们可能会伪装成公司发布代码。因此,公司不会随意开放包含公钥/私钥对的文件访问权限。在大型公司里,程序集的最终强命名通常在开发流程的最后阶段,由有权访问密钥对的特殊团队完成。
然而,这在开发和测试过程中会引发一些问题:
- 公钥是程序集标识的四个组成部分之一,在提供公钥之前,无法设置程序集的标识。
- 弱命名的程序集不能部署到全局程序集缓存(GAC)。但开发人员和测试人员需要能够以发布时的方式编译和测试代码,包括其在GAC中的标识和位置。
为解决这些问题,出现了一种修改后的强命名方式,即延迟签名(也称为部分签名)。这种方式既能克服上述问题,又不会公开私钥。在延迟签名中,编译器仅使用公钥/私钥对中的公钥,将公钥放入清单以完善程序集的标识,同时使用一块0来为数字签名预留空间。
创建延迟签名程序集需完成以下两步:
1. 创建仅包含公钥的密钥文件副本,而非公钥/私钥对。
2. 在源代码的程序集作用域中添加一个名为DelaySignAttribute的额外属性,并将其值设置为true。
若尝试将延迟签名的程序集部署到GAC,CLR不会允许,因为它不是强命名的。要在特定机器上部署,需从Visual Studio命令提示符发出以下命令,以禁用该机器上GAC对该程序集的签名验证,并允许将其安装到GAC中:
sn –vr MyAssembly.