未使用的程序集引用会带来什么成本?

8
我想知道在.NET解决方案中引用程序集的各种成本。我对技术和组织成本都感兴趣。
一些例子:
- 未使用的程序集包含额外的字节以进行传输(下载时间更长,浪费空间)。 - 未使用的程序集可能包含可利用的安全漏洞。 - 未使用的程序集可能会产生额外的启动成本。 - 未使用的程序集可能会产生额外的审核成本(例如此问题)。 - 未使用的程序集可能会让新开发人员感到困惑。

即使未使用的程序集被运送,我也看不出它可能构成安全风险。因为它是未使用的,它的代码从未被执行过(甚至包括静态构造函数)。 - Heinzi
@Heinzi:我完全支持Marijn的观点。移除引用并不部署程序集是一个小小的裁剪,可以避免后续大量愚蠢问题。 - David Schmitt
我并没有表示我不同意Marijn的观点-相反,有很多好的理由不引用和不部署不需要的程序集。我只是不明白关于安全性的要点,因为我想不到任何攻击方法会利用一个未使用的程序集中的安全漏洞。 - Heinzi
@Heinzi:我向您推荐http://xkcd.com/883/。 - David Schmitt
3个回答

11
如果在项目中引用了一个程序集,但实际上没有使用该程序集中的任何类型,则未使用的程序集将不会成为最终产品的一部分。引用会在编译时被删除。
只有在开发过程中引用许多未使用的程序集可能会使开发人员混淆项目的依赖关系,这是唯一的“开销”。在您的项目中每添加一个新程序集也会为IntelliSense和编译器创建一些开销,但在大多数情况下您不会注意到。
ReSharper 有一个功能可以分析所引用的程序集是否被使用。

谢谢,你有任何指向这个在编译时被移除的事实的参考资料吗? - Robert Jeppesen
1
@RobertJeppesen:不确定我是不是很多年前在Don Box的Essential .NET,Volume I中读到的,但你可以通过编译一个带有“太多”引用的项目并查看生成的程序集来自行测试。 - Martin Liversage

1
在我看来,即使是考虑未使用的引用(我们在这里为什么需要XML?),对我和我的同事来说,组织开销也足以激励我们予以移除。因此,我从未考虑过这会对部署或性能产生什么影响。

0

如果您在汇编中没有使用任何内容,则在编译时会将其剥离,因此成本为零。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接