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


当前回答

我遇到过AXTools CODESMART..试一次。 在审查部分使用代码分析器。它将列出死的局部和全局函数 其他问题。

其他回答

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

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

NDepend - this tool is just amazing. It takes a little while to grok, and after the first 10 minutes I think most developers just say "Screw it!" and delete the app. Once you get a good feel for NDepend, it gives you amazing insight to how your apps are coupled. Check it out: http://www.ndepend.com/. Most importantly, this tool will allow you to view methods which do not have any direct callers. It will also show you the inverse, a complete call tree for any method in the assembly (or even between assemblies).

无论你选择什么工具,都不能掉以轻心。特别是当你在处理库类型程序集上的公共方法时,因为你可能永远不知道应用程序什么时候引用了它们。

Resharper是好的,就像其他人所说的。但是要注意,这些工具不会找到反射使用的代码,例如不能知道某些代码没有被反射使用。

ReSharper在寻找未使用的代码方面做得很好。

在VS IDE中,你可以右键单击定义并选择“查找全部” 引用,尽管这只适用于解决方案级别。

事实上,这个工具永远不能给你一个100%确定的答案,但是覆盖率工具可以让你的钱花得很值。

如果您使用全面的单元测试套件,那么您可以使用测试覆盖工具来查看在测试运行期间哪些代码行没有执行。您仍然需要手动分析代码:要么消除您认为的死代码,要么编写测试以提高测试覆盖率。

其中一个这样的工具是NCover,它在Sourceforge上有开源前驱。另一种选择是PartCover。

在stackoverflow上看看这个答案。

我还要提一下,使用IOC也就是Unity可能会让这些评估产生误导。我可能有错误,但几个非常重要的类,通过Unity实例化似乎没有实例化,就ReSharper可以告诉。如果我按照ReSharper的建议去做,我就会被洗掉!