获取Visual Studio中的零参考代码列表

Nim*_*ami 114 c# visual-studio-2013 codelens

在visual studio 2013中,Code Lens显示了特殊代码(方法,属性,字段......)的引用数量.我想在visual studio中使用未使用的(零参考)代码.有没有办法得到它们?

我的意思是以下参考:

在此输入图像描述

Ada*_*ite 160

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

为此,我只创建了一个新的代码分析规则集文件(通过文件 - >新建 - >文件,确保选中左窗格中的常规并向下滚动以查找代码分析规则集,为其提供文件名,然后搜索并选择以下规则).请参阅下面的规则集文件的内容,您可以简单地将其复制并粘贴到一个扩展名为.ruleset的新文件中使用.

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

然后,您只需在项目/解决方案上运行代码分析(通过分析 - >运行代码分析解决方案 -OR- Alt + F11),它将作为警告,任何未引用的方法或找到的未使用的成员返回.它甚至可以找到方法引用的方法,这些方法本身在其他地方没有引用.

但要小心,因为死代码的代码分析方法之一可以引导你错误,如果引用只是通过委托调用方法来"隐藏",当然还有反射.

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

  • 未从任何其他代码调用的私有方法(CA1811)
  • 未使用的局部变量(CA1804)
  • 未使用的私人田地(CA1823)
  • 未使用的参数(CA1801)
  • 未从任何其他代码实例化的内部类(CA1812).
  • 按位OR限制开关中的死代码(C6259)

下面是.ruleset文件的内容,按照上面的步骤可以获得你的节奏.您只需复制以下XML,将其粘贴到记事本++中,使用扩展名.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>
Run Code Online (Sandbox Code Playgroud)

希望这对您有所帮助,不要忘记选择最佳答案.

  • 我不认为这完全回答了这个问题.主要区别在于CodeLens将告诉您PUBLIC方法在整个解决方案中没有引用.这是关键.FxCop,R#,以及适合任何非公开场合的方法. (28认同)
  • @mike考虑一下:如果您想通过批量操作查找无效代码,则您往往不关心私有/受保护的成员,因为这些是本地问题。例如,我正在将一个500k + LoC项目与100+个项目和10+解决方案迁移到存储库模式架构。迁移组件后,我需要知道可以删除哪些旧接口。诸如Eclipse之类的某些IDE都具有用于此目的的工具。变灰的本地方法根本不是我关心的问题,我想要一堆PUBLIC类/接口,其中代码镜头会告诉我“ 0”。 (4认同)

小智 18

我会浏览每个文件,执行 Ctrl-MO 命令以折叠所有内容,然后四处滚动寻找参考 0。

  • 对于包含 10,000 个文件的解决方案来说不太好! (36认同)

小智 11

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

  • 有用,但仅适用于私人成员,并且OP似乎想要所有未使用的代码。 (5认同)

Ulf*_*ius 5

这是实现此目的的手动方法,我用它来查找标记为公共的未使用的类。

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

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

  • 这根本不切实际。 (50认同)
  • 我投票赞成,因为这至少是一种真正实现我想要的方法,即找到未使用的公共类。是的,这对于大型解决方案来说是不切实际的,即使在小型解决方案中也无法针对方法和领域进行扩展。但我不需要花费 300 美元/年购买 Resharper 就能做到这一点。说它不实用就像说“穷人的调试器”又名“Debug.WriteLine”不是仅仅因为它不实用而找到问题的解决方案。但是,如果您的免费调试器无法工作,并且您需要数百美元,那么我可能有兴趣了解它。 (13认同)
  • 它在一个大型项目中适用于我,并且是一种解决方案。更困难的情况可能会有所不同,但我想提供这种可能性。 (6认同)
  • 我从来没有说过这很实用。它只是一种查找未使用的公共类的方法。并非编程中的所有内容都是实用的。 (2认同)

小智 5

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

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