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


133

在Visual Studio 2013中,特殊代码(方法,属性,字段等)的引用数量由Code Lens显示。我想在Visual Studio中获取未使用的(零参考)代码。有什么办法让他们吗?

我的意思是下面的参考:

在此处输入图片说明


7
我认为他想要列出所有未引用的方法,而不是将该特定方法的引用数设为零。
尔根·卡米利里

1
如果您确实想查找未使用的参考,则会发现很多重复的问题。只是谷歌搜索“ c#查找未使用的代码”
Panagiotis Kanavos 2015年

1
是的,我想找到所有未使用的代码包含方法,属性,等等
尼玛Rostami

1
请记住,如果public不搜索整个代码库,就无法确定a 是否未使用。但是,对于未使用的内部部件和私有部件,如果启用了适当的警告,则Code Analysis将警告您。
马修·沃森

2
多年后,屏幕截图仍然令人误解。
Sinjai

Answers:


184

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

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

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

然后,您只需在项目/解决方案上运行代码分析(通过分析 - >在解决方案上运行代码分析 -OR- 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>

30
我认为这不能完全回答问题。主要区别在于CodeLens会告诉您,整个解决方案中,PUBLIC方法的引用为零。这是关键。FxCop,R#和您的方法适用于任何非公开场合。
Scott Wylie

1
@ScottWylie-我不同意。我只是尝试了上面的解决方案,它没有标记未引用的公共方法。CodeLens在标记死代码,未引用的本地内容和未使用的变量方面非常出色。我认为使用第三方工具可以使大多数人获得他们想要的东西。
mike

7
@mike考虑一下:如果您想通过批量操作查找无效代码,则您往往不关心私有/受保护的成员,因为这是本地问题。例如,我正在将一个500k + LoC项目与100+个项目和10+解决方案迁移到存储库模式架构。迁移组件后,我需要知道可以删除哪些旧接口。诸如Eclipse之类的某些IDE都具有用于此目的的工具。变灰的本地方法根本不是我关心的问题,我想要一堆PUBLIC类/接口,其中代码镜头会告诉我“ 0”。
奥利弗·史默


0

我将遍历每个文件,执行Ctrl-MO命令以折叠所有内容,然后四处滚动以查找参考0。


-1

这是一种完成此目的的手动方法,我用它来查找标记为public的未使用的类。

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

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


14
这一点都不实际。
Don Rolling

1
它在一个大型项目中对我有用,是一种解决方案。在更困难的情况下,情况可能会有所不同,但我想提供这种可能性。
Ulfius19年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.