Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查找未使用的代码_C#_.net_Refactoring - Fatal编程技术网

C# 查找未使用的代码

C# 查找未使用的代码,c#,.net,refactoring,C#,.net,Refactoring,我必须重构一个大型C#应用程序,我发现了很多从未使用过的函数。如何检查未使用的代码,以便删除所有未使用的函数?在查找未使用的代码方面做得很好 在VSIDE中,您可以右键单击定义并选择“全部查找” 参考资料”,虽然这仅在解决方案级别有效。这是一个很好的问题,但请注意,您正在危险的水域中行走。删除代码时,必须确保经常编译和测试 我想到了一个很棒的工具: 这个工具真是太棒了。摸索需要一段时间,在最初的10分钟后,我想大多数开发者只会说“去他妈的!”然后删除应用程序。一旦你对NDepend有了一个良好的

我必须重构一个大型C#应用程序,我发现了很多从未使用过的函数。如何检查未使用的代码,以便删除所有未使用的函数?

在查找未使用的代码方面做得很好

在VSIDE中,您可以右键单击定义并选择“全部查找”
参考资料”,虽然这仅在解决方案级别有效。

这是一个很好的问题,但请注意,您正在危险的水域中行走。删除代码时,必须确保经常编译和测试

我想到了一个很棒的工具:

这个工具真是太棒了。摸索需要一段时间,在最初的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个默认规则更加详细的原因:

  • (因此检测未使用的类、结构、接口、委托…)
NDepend集成在VisualStudio20172015、2013、2012、2010中,因此可以修改这些规则。该工具还可以集成到您的CI流程中,它可以生成显示违反规则和罪魁祸首代码元素的代码。NDepend也有自己的优势

如果你点击上面的3个链接来查看这些规则的源代码,你会发现关于类型和方法的链接有点复杂。这是因为它们不仅检测未使用的类型和方法,还检测仅由未使用的死类型和方法使用的类型和方法(递归)

这是静态分析,因此规则名称中可能包含前缀。如果只通过反射使用代码元素,则这些规则可能会认为它是未使用的,而不是这样。p> 除了使用这3条规则外,我还建议通过测试测量代码覆盖率,并努力实现完全覆盖。通常,您会看到测试无法覆盖的代码实际上是可以安全丢弃的未使用/死代码。这在复杂算法中尤其有用,因为在复杂算法中,不清楚代码分支是否可到达


免责声明:我为独立软件公司工作。

我遇到过AXTools CODESMART..试试看。 在评论部分使用代码分析器。它将列出失效的本地和全局函数以及
其他问题。

我还想提到的是,使用IOC aka Unity可能会使这些评估产生误导。我可能犯了错误,但就ReSharper所知,通过Unity实例化的几个非常重要的类似乎没有实例化。如果我按照ReSharper的建议去做,我会被用水管冲洗的

我很惊讶这个问题被贴上了离题的标签,我发现这个问题和答案在问题写完11年后很有用。提供的非主题链接表示“…程序员常用的软件工具;并且是…”与SO绝对相关!。另一个注意事项是,如果你的应用程序是asp.net,使用NDepend,你将需要预编译你的站点,这样你就可以分析后面的代码,而NDepend无法覆盖/了解来自aspx页面的调用(即ObjectDataSources等中的方法调用),这很好。没有足够的人知道这件事。您还必须启用解决方案范围的分析才能显示所有内容。Resharper是一个很棒的工具,但我发现它对于此任务不可靠。我有一个公共方法,其中我删除了所有引用。如果我右键单击该方法并选择ShowUsages,则没有,但是Resharper的代码问题没有将其列为未使用。我们正在使用依赖项注入。因此,一切看起来都习惯于重新精简,因为即使是未使用的类型也仍在unity中注册。@user890155这可能是因为该方法是公共的,libar