我的一位同事非常热衷于在大会上签名.他真的想签任何东西.即使我们使用来自Microsoft的未签名的程序集,他也会拿走源代码,对其签名,然后要求其他开发人员使用他的副本.
我可以理解签署程序集背后的基本思想:确保特定的程序集不会被某个狡猾的黑客攻破.因此,如果我们是一家软件开发公司,我们应该在向客户发布一些.NET库之前签署我们的程序集.
然而,我们在这里主要是为自己开发web应用程序,我看不出为我们使用的每个程序集签名有什么意义.
我错过什么了吗?
我的一位同事非常热衷于在大会上签名.他真的想签任何东西.即使我们使用来自Microsoft的未签名的程序集,他也会拿走源代码,对其签名,然后要求其他开发人员使用他的副本.
我可以理解签署程序集背后的基本思想:确保特定的程序集不会被某个狡猾的黑客攻破.因此,如果我们是一家软件开发公司,我们应该在向客户发布一些.NET库之前签署我们的程序集.
然而,我们在这里主要是为自己开发web应用程序,我看不出为我们使用的每个程序集签名有什么意义.
我错过什么了吗?
对在受信任环境中使用的程序集进行签名在我看来似乎有些过分.
关于已签名程序集的一个有趣之处在于,它们的加载速度比未签名的程序集稍慢,因为它们必须经过加密验证.
为了对程序集进行签名,它所依赖的任何程序集也必须经过签名.我的猜测是,这有助于您的同事对所有内容进行签名--编译器要求这样做.
EDIT.写下这个答案后,你可以看到赞成和反对阵营的支持率大致相当.这里显然没有正确的答案.
不过,迫使我们进行这次编辑的原因是,如今我们从NuGet中获取了如此多的开源库,其中很多根本没有签名.如果要对程序集进行签名,还需要对所有依赖项进行签名.许多已签名的开源库在其源代码存储库中公开提供了用于签名的私钥.
与所有事情一样,我们也需要做出权衡.根据我在私有环境中工作的经验,签名的好处大多是理论上的(或理论上的,就像@user289100次提到的那样),除非您担心政府机构修改您的代码,在这种情况下,您需要对您的基础设施的许多级别疑神疑鬼,以至于签名看起来像是一件很小的工作.否则,必须签署所有文件所带来的挑战似乎就不值得了.然而,你的环境可能有不同的要求,或者你可能是一个受虐狂!
有关使用强名称时与程序集版本控制相关的挑战的信息,请参见Teun D's answer.