请说明在 .NET 环境中,为程序集添加强名称签名的具体方法和步骤。
考察说明
考察对 .NET 程序集强名称签名机制的理解和实际操作能力。
回答思路
- 【回答框架 1】强名称签名是 .NET 中用于唯一标识程序集并防止篡改的机制,由公钥、公钥令牌、版本号等组成,通过私钥对程序集清单进行签名。
- 【回答框架 2】实现步骤:首先使用 sn.exe 工具或相关命令生成密钥对(.snk 文件),然后在项目属性或 AssemblyInfo.cs 中指定密钥文件并配置签名,最后编译项目即可完成强名称签名。
- 【回答框架 3】签名后的程序集会被放入全局程序集缓存(GAC)或作为共享程序集使用,CLR 在加载时会验证签名,确保程序集未被篡改且来源可信。
- 【回答框架 4】需要注意强名称签名不保证程序集安全性,仅提供身份标识和完整性校验,且私钥必须安全保管,否则可能导致签名泄露或被冒用。
- 【回答框架 5】若程序集需要被其他强名称程序集引用,也必须进行强名称签名,否则会引发编译或运行时错误。
- 【关键点 1】强名称签名使用密钥对标识程序集,防止篡改。
- 【关键点 2】主要工具是 sn.exe,生成 .snk 文件。
- 【关键点 3】签名通过项目属性或 AssemblyInfo.cs 配置。
- 【关键点 4】签名后程序集可放入 GAC。
- 【关键点 5】私钥需保密,强名称不提供安全保证。
- 【易错点 1】强名称签名不提供安全性保证,仅用于身份和完整性校验。
- 【易错点 2】私钥泄露可能导致程序集被冒用或签名替换。
- 【易错点 3】延迟签名时需跳过程序集强名称验证,需在开发环境中正确配置跳过验证。