在C#app中查找未使用的类

时间:2010-04-27 19:10:34

标签: c#

我是C#/。net / Visual Studio noob。我继承了一个半完成的手机C#应用程序。在调试过程中,我遇到了几个半完成的类,这些类似乎没有在代码中的任何其他地方使用。有没有办法确定是否在任何地方实例化了类定义?

7 个答案:

答案 0 :(得分:14)

最快的方法(在Visual Studio中)是右键单击类型名称,然后从上下文菜单中选择查找所有引用。这将显示当前解决方案中引用该类型的所有位置。

答案 1 :(得分:3)

你应该得到Resharper - 它会以灰色显示“死”代码并使重构更容易!您可能也更喜欢CodeRush

答案 2 :(得分:2)

如果没有ReSharper或类似的工具,您始终可以在整个解决方案中搜索“new ClassName”。

答案 3 :(得分:1)

我通常从Shift-F12开始(或者右键单击类名并选择“查找所有引用”)

答案 4 :(得分:0)

您可以列出所有课程(搜索class [a-zA-Z0-9_]+),然后搜索new <classname>。未使用在第二次搜索时未找到的那些。当然,您喜欢的脚本语言中的简单脚本会有所帮助。

但是,您需要过滤掉用作已使用类的基类的类。

请注意,这样您就找不到仅使用未使用的类的类,因此可能需要多次迭代。此外,如果有两个类相互使用(但不是从外部使用),删除它们可能需要额外的努力。

编辑:
更好的方法是构建依赖树:对于每个类,您定义该类使用哪个类,以及哪个类是该类的基类。通过这种方式,您可以找到每个类所需的类。然后,您可以从包含Main的类中定义(直接或间接)所需的类。所有其他类都“无法访问”,因此未使用。

然而,这种方法将删除由反射实例化的类。好吧,没有办法在编译时发现,无论如何都会通过反射来实例化哪些类。

也许使用现成的工具(像其他提议的那样)是一种更简单的选择。

答案 5 :(得分:0)

除非您知道代码以及可能使用它的模块,否则CodeRush或Resharper是您更好的选择。

其他答案都没有提到可以应用于类/函数的修饰符。在删除代码之前,您当然希望考虑范围。您可能有其他使用类/函数的程序集。

答案 6 :(得分:0)

从项目中移除它们并让你的单元测试(咳咳,你有那些权利?)和你的QA团队(你有这个权利?)来确定问题。

抛开笑话,如果它显然不完整,为什么不简单地删除代码并重新编译?

我将采取的后续步骤是使用像“查找所有引用”或Resharper这样的工具(它甚至还有一个功能吗?)

相关问题