31

关于这个问题:“删除未使用的引用(!=“使用”) ”,我想知道是否有一个工具可以从 Visual Studio 解决方案中删除未使用的类、结构、委托等。

设想:

我有一个杂乱无章的 Visual Studio 解决方案,其中包含 1000 个:

  • 本机方法导入
  • 结构
  • 代表们
  • 枚举

而不是通过单击“查找所有引用”并确定代码是否在某处使用的每个文件,是否有任何机制可以让我轻松删除冗余代码文件?

例子:

//This class contains a method called getRandomValue which returns type RANDOM
public class NativeMethods
{
    [DllImport("random.dll")]
    public static extern RANDOM getRandomValue();
}

//This is the RANDOM object as referenced by getRandomValue();
[StructLayout(LayoutKind.Sequential)]
public struct RANDOM
{
    uint a;
    uint b;
    uint c;
}

//This is redundant since nothing is referencing it.
[StructLayout(LayoutKind.Sequential)]
public struct MESSAGE
{
    IntPtr sender;
    IntPtr recipient;
    char[] mText;
}

注意自我:

我的直觉是这会很棘手,因为与 Java 不同,对象名称不必与文件名相同,并且多个对象声明可以驻留在单个文件中,但是在这种情况下(我的场景)每个对象都是在自己的文件中声明(具有相同的名称)。

4

3 回答 3

17

ReSharper 是清理代码的最佳选择。

借助ReSharper Early Access Program,您可以免费使用它。

在此处输入图像描述

于 2012-10-09T01:34:59.700 回答
12

您可以使用多种工具来执行此操作:

FxCop 只会找到未使用的内部代码和私有代码。当然,如果您确保只公开公开需要在程序集之外访问的代码,那么这应该足够了。

于 2012-10-08T23:40:16.050 回答
0

正如@Ergwun 所指出的,工具NDepend可以帮助查找未使用的方法、字段和类型。

详细说明一下,NDepend 建议在 LINQ 查询 (CQLinq) 上编写代码规则。提出了大约200 条默认代码规则,其中 3 条专用于未使用/死代码检测

基本上这样的规则来检测未使用的方法,例如:

// <Name>Dead Methods</Name>
warnif count > 0 
from m in Application.Methods where !m.MethodsCallingMe.Any()
select m

NDepend 规则查找未使用的方法(死方法)

但这条规则很幼稚,会返回微不足道的误报。在许多情况下,一个方法从未被调用但它未被使用(入口点、类构造函数、终结器......)这就是为什么 3 个默认规则更加详细的原因:

NDepend 集成在 Visual Studio 2017、2015、2013、2012、2010 中,因此可以在 IDE 中检查/浏览/编辑这些规则。该工具还可以集成到您的 CI 流程中,它可以构建报告,显示违反规则和罪魁祸首代码元素。NDepend 还有一个VS Team Services 扩展

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

这是静态分析,因此规则名称中的前缀可能是。如果通过反射使用代码元素,则这些规则可能会将其视为未使用,但事实并非如此。

除了使用这 3 条规则之外,我还建议通过测试来衡量代码覆盖率并争取完全覆盖。通常,您会看到测试无法覆盖的代码实际上是可以安全丢弃的未使用/死代码。这在不清楚代码分支是否可达的复杂算法中特别有用。

免责声明:我为 NDepend 工作。

于 2017-06-13T08:09:03.830 回答