为啥不能在 C# 中删除未使用的引用

Posted

技术标签:

【中文标题】为啥不能在 C# 中删除未使用的引用【英文标题】:Why is it not possible to remove unused references in C#为什么不能在 C# 中删除未使用的引用 【发布时间】:2011-02-18 10:03:56 【问题描述】:

Visual Studio 是否有任何理由无法删除 C# 和 C++ 项目中未使用的引用(对项目和程序集),而可以从 Visual Basic 项目中删除 (see here)?

我知道您可以使用 Resharper 等其他工具来完成此操作,我只是想知道是否有任何技术原因无法在 C# 和 C++ 项目中执行此操作?或者微软只是选择它以这样的方式工作。这似乎是一个非常有用的功能。

【问题讨论】:

【参考方案1】:

请注意,编译器会自动从程序集中删除任何未使用的引用,因此在程序集元数据级别这是多余的。然后它就变成了一个 IDE/工具问题。会不会是不可能的?否(尽管显然它需要保留任何标记为复制本地的内容,以确保它被部署)。因此,我们或许可以假设,这只是一个“实施 vs 实用性的时间”(与其他可以做的更有用的事情相比)。

如果你愿意,我相信你可以为它编写一个 IDE 扩展;p

【讨论】:

知道有用!我是那些坚持删除未使用的引用的“人”之一:) 好点!我对此表示怀疑,但并不完全确定。但是,在我看来,它会影响 VS 中的依赖概述,并且确实会影响编译项目时构建的项目等等。【参考方案2】:

我在 Microsoft Connect 上找到了 this 建议。听起来微软实际上认为这是一个好主意,但只是没有“时间”(阅读:优先级)来实施它。太糟糕了!

【讨论】:

【参考方案3】:

此功能适用于 VB(通过“引用”属性页上的“未使用的引用”按钮)。但 CSharp 就是这种情况,例如,用户可以添加对程序集的引用以使其被复制到输出目录。他们可能通过反射使用程序集,而不是针对它进行编译——在这种情况下,VS 无法检测到“使用”了这样的程序集。所以设计这样的算法并不是100%成功的。但是 flag 是一个将程序集标记为“未使用”的选项(但是,用户仍然可以选择是否从引用列表中删除程序集)。

删除未使用的命名空间可以为此做一些工作。

【讨论】:

以上是关于为啥不能在 C# 中删除未使用的引用的主要内容,如果未能解决你的问题,请参考以下文章

█c# 为啥有的dll不能直接引用,必须regsvr32 注册后 才能引用?

PHP为啥不能调用MySQL

为啥我们不能将本地 C++ 的引用传递给 C++/CLI?

为啥在 C# 参考文本中引用堆栈和堆?

elementui为啥不能修改悬浮框的样式

为啥我不能在 C# 中使用抽象静态方法?