C#面试题更新 2026-08-03

请说明在 .NET 环境中,为程序集添加强名称签名的具体方法和步骤。

考察说明

考察对 .NET 程序集强名称签名机制的理解和实际操作能力。

回答思路

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