177

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

我的意思是以下参考:

在此处输入图像描述

4

5 回答 5

209

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

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

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

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

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

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

  • 未从任何其他代码调用的私有方法 (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>
于 2016-06-01T22:21:56.500 回答
23

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

于 2020-07-13T16:00:52.277 回答
6

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

于 2020-12-11T12:58:30.543 回答
6

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

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

于 2020-04-14T17:25:54.620 回答
3

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

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

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

于 2018-11-19T22:34:01.140 回答