我必须重构一个大型的C#应用程序,并且发现了很多从未使用过的功能。如何检查未使用的代码,以便删除所有未使用的功能?
我必须重构一个大型的C#应用程序,并且发现了很多从未使用过的功能。如何检查未使用的代码,以便删除所有未使用的功能?
Answers:
是的,ReSharper会这样做。右键单击您的解决方案,然后选择“查找代码问题”。结果之一是“未使用的符号”。这将向您显示未使用的类,方法等。
这是一个很大的问题,但请注意,您正在这里踩水。删除代码时,必须确保经常进行编译和测试。
我想到了一个很棒的工具:
NDepend-此工具非常棒。花费一些时间,在开始的10分钟后,我认为大多数开发人员只会说“拧紧它!”。并删除该应用。一旦您对NDepend有了良好的了解,它就会为您提供有关应用程序耦合方式的惊人见解。签出:http : //www.ndepend.com/。最重要的是,该工具将允许您查看没有任何直接调用方的方法。它还将向您展示程序集(甚至程序集之间)中任何方法的逆向,完整的调用树。
无论选择哪种工具,都不是一件容易的事。尤其是在处理库类型程序集上的公共方法时,您可能永远都不知道应用程序何时引用它们。
正如Jeff所指出的,NDepend工具可以帮助查找未使用的方法,字段和类型。
为了详细说明,NDepend建议编写基于LINQ查询的代码规则(CQLinq)。建议使用大约200个默认代码规则,其中3个专用于未使用/死代码检测
基本上,这种检测未使用方法的规则如下所示:
// <Name>Dead Methods</Name>
warnif count > 0
from m in Application.Methods where !m.MethodsCallingMe.Any()
select m
但是此规则是幼稚的,并且会返回琐碎的误报。在许多情况下,永远不会调用方法,而方法却没有被使用(入口点,类构造函数,终结器...),这就是为什么对这三个默认规则进行了详细说明的原因:
NDepend集成在Visual Studio 2017、2015、2013、2012、2010中,因此可以在IDE内部检查/浏览/编辑这些规则。该工具还可以集成到CI流程中,并且可以生成报告,以显示违反规则和罪魁祸首的代码元素。NDepend还具有VS Team Services扩展。
如果单击上面指向这些规则源代码的这3个链接,您会发现与类型和方法有关的链接有些复杂。这是因为它们不仅检测未使用的类型和方法,而且还检测仅由未使用的无效类型和方法(递归)使用的类型和方法。
这是静态分析,因此是规则名称中的潜在前缀。如果仅通过反射使用代码元素,则这些规则可能会将其视为未使用,情况并非如此。
除了使用这3条规则外,我建议您通过测试来衡量代码的覆盖率,并争取完全覆盖。通常,您会看到测试无法涵盖的代码实际上是可以安全丢弃的未使用/死代码。这在尚不清楚代码分支是否可达的复杂算法中特别有用。
免责声明:我为NDepend工作。
FXCop是一个代码分析器...它的作用远不止是找到未使用的代码。我使用FXCop已有一段时间,但由于对它的建议迷失了方向,因此我将其卸载了。
我认为NDepend看起来更像是候选人。