C# 查找未使用的代码
我必须重构一个大型C#应用程序,我发现了很多从未使用过的函数。如何检查未使用的代码,以便删除所有未使用的函数?在查找未使用的代码方面做得很好 在VSIDE中,您可以右键单击定义并选择“全部查找”C# 查找未使用的代码,c#,.net,refactoring,C#,.net,Refactoring,我必须重构一个大型C#应用程序,我发现了很多从未使用过的函数。如何检查未使用的代码,以便删除所有未使用的函数?在查找未使用的代码方面做得很好 在VSIDE中,您可以右键单击定义并选择“全部查找” 参考资料”,虽然这仅在解决方案级别有效。这是一个很好的问题,但请注意,您正在危险的水域中行走。删除代码时,必须确保经常编译和测试 我想到了一个很棒的工具: 这个工具真是太棒了。摸索需要一段时间,在最初的10分钟后,我想大多数开发者只会说“去他妈的!”然后删除应用程序。一旦你对NDepend有了一个良好的
参考资料”,虽然这仅在解决方案级别有效。这是一个很好的问题,但请注意,您正在危险的水域中行走。删除代码时,必须确保经常编译和测试 我想到了一个很棒的工具: 这个工具真是太棒了。摸索需要一段时间,在最初的10分钟后,我想大多数开发者只会说“去他妈的!”然后删除应用程序。一旦你对NDepend有了一个良好的感觉,它会让你对你的应用程序是如何耦合的有着惊人的洞察力。请查看:。最重要的是,此工具将允许您查看没有任何直接调用方的方法。它还将向您显示程序集中(甚至程序集之间)任何方法的反向调用树
无论你选择什么工具,这都不是一项可以掉以轻心的任务。尤其是当您处理库类型程序集上的公共方法时,因为您可能永远不知道应用程序何时引用它们。像其他人所说的那样,Resharper很适合这样做。但是要小心,这些工具找不到反射使用的代码,例如,无法知道反射是否使用了某些代码。FXCop是一个代码分析器。。。它不仅仅是查找未使用的代码。我使用FXCop有一段时间了,对它的建议非常迷恋,所以我卸载了它
我认为NDepend看起来更像一个候选人。事实是,这个工具永远不会给你一个100%肯定的答案,但覆盖工具可以让你在金钱上有一个很好的运行 如果使用综合单元测试套件进行计算,则可以使用测试覆盖率工具查看测试运行期间未执行的代码行。您仍然需要手动分析代码:要么消除您所考虑的死区代码,要么编写测试以提高测试覆盖率。 一个这样的工具是开放源码的。另一种选择是
在stackoverflow上查看此项。是的,ReSharper会执行此操作。右键单击解决方案并选择“查找代码问题”。结果之一是“未使用的符号”。这将显示未使用的类、方法等。如前所述,该工具可以帮助查找未使用的方法、字段和类型 为了详细说明一下,NDepend建议写一篇文章。提出了四种方法,其中三种专门用于未使用/死代码检测 基本上,检测未使用方法的规则(例如)如下所示:
// <Name>Dead Methods</Name>
warnif count > 0
from m in Application.Methods where !m.MethodsCallingMe.Any()
select m
//死方法
如果计数大于0,则警告
从m开始应用。方法在哪里!m、 MethodScalingMe.Any()
选择m
但这条规则很幼稚,只会返回微不足道的误报。在许多情况下,一个方法从未被调用,但它并未被使用(入口点、类构造函数、终结器…),这就是为什么3个默认规则更加详细的原因:
- (因此检测未使用的类、结构、接口、委托…)
免责声明:我为独立软件公司工作。我遇到过AXTools CODESMART..试试看。 在评论部分使用代码分析器。它将列出失效的本地和全局函数以及
其他问题。我还想提到的是,使用IOC aka Unity可能会使这些评估产生误导。我可能犯了错误,但就ReSharper所知,通过Unity实例化的几个非常重要的类似乎没有实例化。如果我按照ReSharper的建议去做,我会被用水管冲洗的 我很惊讶这个问题被贴上了离题的标签,我发现这个问题和答案在问题写完11年后很有用。提供的非主题链接表示“…程序员常用的软件工具;并且是…”与SO绝对相关!。另一个注意事项是,如果你的应用程序是asp.net,使用NDepend,你将需要预编译你的站点,这样你就可以分析后面的代码,而NDepend无法覆盖/了解来自aspx页面的调用(即ObjectDataSources等中的方法调用),这很好。没有足够的人知道这件事。您还必须启用解决方案范围的分析才能显示所有内容。Resharper是一个很棒的工具,但我发现它对于此任务不可靠。我有一个公共方法,其中我删除了所有引用。如果我右键单击该方法并选择ShowUsages,则没有,但是Resharper的代码问题没有将其列为未使用。我们正在使用依赖项注入。因此,一切看起来都习惯于重新精简,因为即使是未使用的类型也仍在unity中注册。@user890155这可能是因为该方法是公共的,libar