Answers:
为什么以前的作者会以这种方式对程序集签名?
不知道,也许他希望所有的程序集都用相同的密钥签名。
签署程序集是否必要?不签署程序集又会有什么问题呢?
不,不是必须的,但这是一种机制,可让您确保组件的真实性。它使您可以确保程序集未被篡改,并且确实来自作者。如果要将它们放入GAC,也很有必要。
签名程序集有什么缺点-会导致延迟吗?
签名的程序集只能加载其他签名的程序集。此外,它们还与特定版本绑定,这意味着如果要使用其他版本,则需要使用绑定重定向或重新编译应用程序。由于验证了签名,因此还有一点性能开销,但是它太少了,您不必担心。
如果要将程序集放入GAC中,则需要签名。
如果您对可执行文件进行签名,则它链接到的所有类库也都需要签名。如果您使用的是第三方库(尤其是需要使用ActiveX控件或类似控件),则可能会很难。
理查德·格里姆斯(Richard Grimes)写了一篇有关.NET安全的很好的讲习班,其中包括有关这一章的章节:安全讲习班
所有程序集都用相同的.snk文件签名的原因可能是因为他使用了代码覆盖率的单元测试。为了能够进行代码覆盖(至少使用Visual Studio 2005测试版本中内置的工具),并且如果程序集已签名,则需要指定用于签名的.snk文件,但是我认为您只能为整个解决方案指定一个.snk文件,因此,如果使用不同的.snk文件签名各个类库,则一次只能检查其中一个的代码覆盖率。
尽管对dll进行所有签名,但仅出于两个原因就应该对dll进行签名
1.版本控制
2.认证
一个。版本控制表示dll已建立在哪个版本上,并将其推入GAC时,可以存在两个具有相同名称的dll,但版本不同
b。身份验证表示该dll在创建时是否未被篡改并且确实存在。
如果您想了解更多有关基础知识和dll签名的信息,可以在这里参考
除了现有的答案,我还要补充一点,当您的DLL将被第三方软件动态加载和使用时,您必须使用签名。出于安全方面的考虑,第三方软件生产商强制执行此类策略本身不是技术要求,而是很普遍的做法,因此是很合理的。
必须在程序集上签名的示例: