use*_*783 28 .net strongname assemblies
我的应用程序包含三个程序集:一个引用几个DLL的EXE.DLL对我的应用程序是私有的 - 它们仅由此可执行文件使用.
这些集会是否应该有一个强有力的名字?
FxCop建议他们应该 - 对于它目前生成的所有程序集:
CA2210:使用强名称密钥对<assembly>进行签名.
但是,这个建议说:
通常,您应该避免强命名应用程序EXE程序集.
和
您可能希望避免使用应用程序专用的强命名组件.
我应该给这些集会一个强有力的名字吗?在这种情况下这样做(或不这样做)有什么好处?
编辑:
看几个具有类似结构的应用程序,似乎没有就此问题达成共识.Paint.NET和Crack.NET的二进制文件没有强名称,而.NET Reflector和Snoop的二进制文件则没有.
有趣的是,使用Expression套件,Microsoft采用了后一种方法:例如,在Expression Blend中,他们选择对Blend.exe和随附的DLL(例如Microsoft.Expression.Blend.dll)进行强名称签名.
似乎我不太可能得到第一个问题的简单答案:"我应该给这些集会一个强有力的名字吗?".但是,我的第二个问题仍然存在:
在这种情况下,强名称签名二进制文件是否有任何好处?或者,不这样做会有什么好处吗?
编辑2:
如果无论如何都没有压倒性的理由,我倾向于给我的集会一个强有力的名字.因此,我对是否有人可以扩展(从第一个链接)感兴趣:
"强命名可能会使管理依赖项变得更加困难,并为私有组件增加不必要的开销."
use*_*783 16
在我看来,这些是在这种情况下强名签名的好处:
签名的缺点(我相信这些是链接文章所指的):
这种选择要么是强命名(因此需要引用匹配精确密钥和精确版本),要么不强命名(并且不需要匹配),这似乎是一种耻辱.如果可能需要密钥而不是特定版本,也许可以获得签名的前2个好处,而不会产生第一个缺点.也许这可以通过应用强名称然后使用app.config处理版本控制问题来实现?
强命名程序集仅用于确保版本兼容性.这与信任程序集不同.
换句话说,"强名称"仅指精确汇编二进制文件与编译时使用的版本号相结合.
如果你GAC那些程序集,那么CLR只会验证一次.当组装是gac'd时.这可以带来性能提升.但是,我的经验表明它很小.
强名称程序集可以替换为不具有强名称的程序集; 这提出了关于强命名的部分,而不是任何类型的安全功能.
我个人认为,与他们相关的疼痛程度并不能证明他们的使用是正确的.痛苦是他们如何使用自动化测试工具.
https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-5054496.html
| 归档时间: |
|
| 查看次数: |
7408 次 |
| 最近记录: |