【问题标题】:Get List of Zero Reference Codes in Visual Studio获取 Visual Studio 中的零参考代码列表
【发布时间】:2015-06-22 07:41:23
【问题描述】:

在 Visual Studio 2013 中,特殊代码(方法、属性、字段...)的引用数量由 Code Lens 显示。 我想在 Visual Studio 中获得未使用的 (零参考) 代码。有什么办法可以得到吗?

我的意思是以下参考:

【问题讨论】:

  • 这个问题没有意义。您是在问如何找到未使用的引用吗?在这种情况下,文本和屏幕截图具有误导性,实际上是不相关的。编译器会为未使用的引用生成警告,并且 ReSharper 等工具会突出显示它们。
  • 我认为他想要一个所有未引用方法的列表,而不是将该特定方法的引用次数归零。
  • 是的,我想查找所有未使用的包含方法、属性等的代码。
  • 多年后,屏幕截图仍然具有误导性。
  • 我真的没有那么误导......截图告诉你他指的是什么参考。如果您阅读他的帖子,他会告诉您他想找到所有显示为 0 引用的内容。没那么难。

标签: c# visual-studio-2013 codelens


【解决方案1】:

可能实现您所追求的最好和最简单的方法是使用 Visual Studio 的内置代码分析工具来查找并直接将您带到死代码和未使用的成员。

为此,我创建了一个新的代码分析规则集文件(通过File->New->File,确保选择左侧窗格中的General并滚动向下找到代码分析规则集,给它一个文件名,然后搜索并选择以下规则)。有关您可以复制并粘贴到扩展名为 .ruleset 的新文件中的规则集文件的内容,请参见下文。

给定一个规则集文件,可以在Solution Explorer面板中右键单击项目文件,然后选择Properties。在项目属性窗口中,单击左侧面板中的 代码分析 选项卡,然后单击 打开 浏览到 .ruleset 文件的位置。如果您转到解决方案文件(而不是项目文件)的属性,您可以在一个地方为解决方案中的每个项目设置代码分析文件(在代码分析设置下,并使用用于选择规则集文件的下拉菜单。注意:您必须之前浏览过规则集文件,它才会显示在此属性窗口的下拉列表中。

然后您只需对项目/解决方案运行代码分析(通过Analyze->在解决方案上运行代码分析 -OR- Alt+F11)它就会出现返回作为警告,它找到的任何未引用的方法或未使用的成员。它甚至会找到被方法引用的方法,而该方法本身在其他地方没有引用。

但是要小心,因为死代码的代码分析可能会导致您出错的一种方式是,如果仅通过委托调用方法(当然还有反射)来“隐藏”引用。 em>

检测死代码的具体规则是:

  • 不从任何其他代码调用的私有方法 (CA1811)
  • 未使用的局部变量 (CA1804)
  • 未使用的私有字段 (CA1823)
  • 未使用的参数 (CA1801)
  • 未从任何其他代码 (CA1812) 实例化的内部类。
  • 按位或受限开关 (C6259) 中的死代码

以下是 .ruleset 文件的内容,您可以按照上述步骤获得,以方便您使用。您可以简单地复制以下 XML,将其粘贴到 notepad++ 中,使用扩展名 .ruleset 保存在某处,然后按上述说明浏览并使用:

<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="Dead Code Rules" Description=" " ToolsVersion="12.0">
  <Rules AnalyzerId="Microsoft.Analyzers.ManagedCodeAnalysis" RuleNamespace="Microsoft.Rules.Managed">
    <Rule Id="CA1801" Action="Warning" />
    <Rule Id="CA1804" Action="Warning" />
    <Rule Id="CA1811" Action="Warning" />
    <Rule Id="CA1812" Action="Warning" />
    <Rule Id="CA1823" Action="Warning" />
  </Rules>
  <Rules AnalyzerId="Microsoft.Analyzers.NativeCodeAnalysis" RuleNamespace="Microsoft.Rules.Native">
    <Rule Id="C6259" Action="Warning" />
  </Rules>
</RuleSet>

【讨论】:

  • 我认为这不能完全回答这个问题。主要区别在于 CodeLens 会告诉您 PUBLIC 方法在整个解决方案中的引用为零。这是关键。 FxCop、R# 和您的方法适用于任何不公开的内容。
  • @ScottWylie - 我不同意。我刚刚尝试了上述解决方案,它没有标记未引用的公共方法。 CodeLens 在标记死代码、未引用的本地内容和未使用的变量方面表现出色。我认为这可以让大多数人在不使用 3rd 方工具的情况下得到他们想要的。
  • @mike 考虑一下:如果您想通过大量操作找到死代码,您往往不关心私有/受保护成员,因为这些是本地问题。例如,我正在将一个包含 100 多个项目和 10 多个解决方案的 500k+ LoC 项目迁移到存储库模式架构。迁移组件后,我需要知道可以删除哪些旧接口。像 Eclipse 之类的一些 IDE 有专门用于此目的的工具。灰色的本地方法根本不是我关心的问题,我想要一个 PUBLIC 类/接口的列表,其中代码镜头会告诉我“0”。
【解决方案2】:

我会浏览每个文件,使用 Ctrl-M-O 命令折叠所有内容,然后滚动查找参考 0。

【讨论】:

    【解决方案3】:

    https://scottlilly.com/c-code-quality-improvement/remove-unused-classes-properties-and-functions/

    “很遗憾,[在 Visual Studio 分析中] 你只能检测未使用的 私人会员。这是因为代码分析器假定公共 成员可能被其他程序使用。这可能是真的,如果你是 通过 Web 服务将它们作为 API 发布或发布您的代码 作为图书馆。 ... ReSharper 具有类似的代码分析功能 - 与 检查未使用的公共成员的优势。”

    【讨论】:

      【解决方案4】:

      在 Visual Studio 中 |错误列表选项卡 |消息选项卡: 消息 IDE0051 私有成员 'xxxxxxxx' 未使用。

      【讨论】:

        【解决方案5】:

        这是我用来查找标记为公共的未使用类的手动方法。

        1. 搜索解决方案中一个项目的所有“公共类”并将其替换为“私有类”。可能还需要替换“公共静态类”和/或“公共抽象类”。
        2. 构建以查找所有错误
        3. 对于构建中的每个错误,使用您的源代码管理来恢复引用类的文件。
        4. 重复每个错误,直到构建成功。
        5. 任何尚未恢复的剩余文件都可能被删除。
        6. (可选)重命名上述文件中的类并再构建一次以查找错误。
        7. 最后一次搜索要删除的类的名称,以确认没有任何实例在反射或魔术字符串中使用。
        8. 删除已识别的未使用类文件。
        9. 对您要清理的每个解决方案项目重复此操作。

        注意:如果您不遵循每个文件一个类的规则,这将需要更多的工作。此外,任何 API 服务端点都需要验证它没有被任何外部项目使用。

        【讨论】:

        • 这根本不实用。
        • 它适用于大型项目,是一种解决方案。更困难的情况可能会有所不同,但我想提供这种可能性。
        • 我从来没有说过它是实用的。它只是一种查找未使用的公共类的方法。并非编程中的一切都是实用的。
        • 我投了赞成票,因为这至少是一种真正做到我想要的方法,即找到未使用的公共类。是的,这对于大型解决方案来说是不切实际的,即使在小型解决方案中也不能适用于方法和领域。但我无需以每年 300 美元的价格购买 Resharper,就可以做到这一点。说它不实用就像说“穷人的调试器”又名Debug.WriteLine 不是解决问题的方法,因为它不实用。但是,如果您的免费调试器不工作,否则您需要数百美元,我可能有兴趣了解它。
        • 并非生活中的一切都是实用的,谢谢 Ulfius:P
        猜你喜欢
        • 2018-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多