【问题标题】:Removing unused code in Visual Studio [duplicate]删除 Visual Studio 中未使用的代码 [重复]
【发布时间】:2012-09-29 05:48:53
【问题描述】:

关于这个问题:“Remove unused references (!= "using")”,我想知道是否有工具可以从 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 不同,对象名称不必与文件名相同,并且多个对象声明可以驻留在单个文件中,但是在这种情况下(我的场景)每个对象都在其自己的文件中声明(具有相同的名称)。

【问题讨论】:

  • 可以考虑使用 ReSharper。它为代码清理提供了很好的支持。

标签: c# .net visual-studio-2010 visual-studio code-cleanup


【解决方案1】:

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

感谢ReSharper Early Access Program,您可以免费使用它。

【讨论】:

  • 我在一夜之间尝试了 Resharper(因为它说这将需要 5 个多小时)但是由于某种原因,当我早上查看它时,它似乎已经崩溃并且无法清理我的代码,但是我将对此进行进一步调查。谢谢! +1 努力。
  • 在最新版本的 Resharper(7.1.3) 中,您可以通过 ReSharper -> Find -> Optimize References 直接分析引用
  • @BillYang 7.1.3 现在不是最新版本。但无论如何,很高兴知道!
  • 它不是免费的,特别是对于一个贫穷的国家来说,它的成本相当高。
【解决方案2】:

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

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

【讨论】:

  • 我试过 Resharper。它说执行代码清理需要 5 个多小时。我不确定它是否应该花那么长时间。我想这取决于项目的规模......无论如何它在五个小时内的某个时候崩溃了,所以我可能需要再做一次!......但是谢谢......+1的努力!
【解决方案3】:

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

为了详细说明,NDepend 建议写成Code Rule over LINQ Query (CQLinq)。提出了大约200 default code rules,其中 3 个专门用于未使用/死代码检测

例如,检测未使用方法的规则基本上如下所示:

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

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

NDepend 集成在 Visual Studio 2017、2015、2013、2012、2010 中,因此这些规则可以是checked/browsed/edited right inside the IDE。该工具还可以集成到您的 CI 流程中,它可以构建reports,它将显示违反的规则和罪魁祸首代码元素。 NDepend 还有一个VS Team Services extension

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

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

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

免责声明:我为 NDepend 工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 2013-05-22
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 2011-08-05
    相关资源
    最近更新 更多