我需要重构一个大型的C#应用程序,发现很多函数从未被使用。如何检查未使用的代码,以便删除所有未使用的函数?
我需要重构一个大型的C#应用程序,发现很多函数从未被使用。如何检查未使用的代码,以便删除所有未使用的函数?
是的,ReSharper可以完成这个功能。右键单击解决方案并选择“查找代码问题”。其中之一是“未使用的符号”。这将向您显示未使用的类、方法等。
这是一个很好的问题,但要注意你在这里涉足危险领域。当你删除代码时,必须确保经常进行编译和测试。
有一个很棒的工具值得一提:
NDepend - 这个工具真是太棒了。需要一点时间来理解,然而在最初的10分钟之后,我想大多数开发者都会说“算了吧!”并删除该应用程序。一旦你对NDepend有了深入了解,它将为你提供关于你的应用程序相互耦合程度的惊人见解。请查看:http://www.ndepend.com/。最重要的是,这个工具将允许你查看没有任何直接调用者的方法。它还会向你展示完整的调用树,包括汇编中(甚至在汇编之间)的任何方法。
无论你选择哪个工具,这都不是一个轻松的任务。特别是如果你正在处理库类型汇编中的公共方法,因为你永远不知道应用程序何时引用它们。
Resharper对于这一点很好,就像其他人所说的那样。但是要小心,这些工具无法发现通过反射使用的代码,例如不能确定某些代码是否未被反射使用。
// <Name>Dead Methods</Name>
warnif count > 0
from m in Application.Methods where !m.MethodsCallingMe.Any()
select m
但是这个规则是天真的,容易返回一些琐碎的误报。有很多情况下一个方法从未被调用,但它并不是未使用的(入口点、类构造函数、终结器...)。这就是为什么三个默认规则更加详细的原因:
NDepend可以集成到Visual Studio 2022、2019、2017、2015、2013、2012、2010中,因此这些规则可以在IDE内部进行检查/浏览/编辑。该工具还可以集成到您的CI过程中,并生成报告以显示违反规则和罪魁祸首的代码元素。NDepend还有一个VS Team Services扩展。我还想提一下,使用IOC(即Unity)可能会使这些评估结果失真。我可能犯了错误,但是通过Unity实例化的几个非常重要的类似乎没有实例化,就Resharper而言。如果我按照Resharper的建议去做,我将会遇到困难!
事实是工具永远不能给你100%的确定答案,但覆盖率工具可以让你得到相当不错的结果。
如果你有全面的单元测试套件,那么你可以使用测试覆盖率工具来查看在测试运行期间未执行的代码行。你仍然需要手动分析代码:要么消除你认为是死代码,要么编写测试以提高测试覆盖率。
其中一个工具是 NCover,它有一个开源前身在 Sourceforge 上。另一个选择是 PartCover。
在 stackoverflow 上查看这个 答案。
我曾经接触过AXTools CODESMART..建议你试一下。 在评论部分使用代码分析器。它会列出死亡的本地和全局函数以及其他问题。
FXCop是一种代码分析器...它不仅可以找到未使用的代码,还可以做更多的事情。我曾经使用FXCop一段时间,但是在其建议中迷失了方向,最终卸载了它。
我认为NDepend看起来更有可能胜任这份工作。