在Visual Studio 2013中,特定代码(方法、属性、字段等)的引用数量由 Code Lens 显示。
我想获取Visual Studio中未使用的(零引用)代码。是否有任何方法可以获取它们?
我的意思是下面的引用:
在Visual Studio 2013中,特定代码(方法、属性、字段等)的引用数量由 Code Lens 显示。
我想获取Visual Studio中未使用的(零引用)代码。是否有任何方法可以获取它们?
我的意思是下面的引用:
实现你想要的最好最简单的方法可能是使用Visual Studio内置的代码分析工具,以查找并直接进入死代码和未使用成员。
为此,我创建了一个新的代码分析规则集文件(通过 文件->新建->文件,确保选择左侧窗格中的常规并向下滚动以找到代码分析规则集,为其命名,然后搜索并选择下面的规则)。以下是规则集文件的内容,您可以将其复制并粘贴到具有扩展名.ruleset的新文件中以使用。
有了规则集文件,您可以右键单击解决方案资源管理器中的项目文件,然后选择属性。在项目属性窗口中,在左侧面板上单击代码分析选项卡,然后单击打开以浏览.ruleset文件的位置。如果您转到解决方案文件的属性(而不是项目文件),则可以在一个地方为解决方案中的每个项目设置代码分析文件(在代码分析设置下,并使用下拉菜单选择规则集文件。注意:您必须先浏览到规则集文件才能在此属性窗口中的下拉菜单中显示它)。
然后,您只需对项目/解决方案运行代码分析(通过 Analyze->Run Code Analysis On Solution-或- Alt + F11 ),它将返回警告,任何未引用的方法或未使用的成员。它甚至会找到被一个方法引用但自身没有其他引用的方法。
然而,要小心,死代码的代码分析可能会误导您,如果引用仅通过委托和反射来调用该方法,则该引用可能会“隐藏”。
检测死代码的规则具体如下:
以下是可通过上述步骤获得的.ruleset文件的内容,以供您方便地复制。您可以将以下XML复制并粘贴到notepad ++中,将其保存在某个位置,并使用如上所述的方式进行浏览和使用:
<?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>
https://scottlilly.com/c-code-quality-improvement/remove-unused-classes-properties-and-functions/
"不幸的是,在Visual Studio分析中,您只能检测未使用的私有成员。这是因为代码分析器假定公共成员可能被其他程序使用。如果您将它们发布为通过Web服务的API或发布您的代码作为库,则可能是真的。... ReSharper具有类似的代码分析功能-具有检查未使用的公共成员的优势。"Debug.WriteLine
不能用来解决问题一样,只是因为它不实用。但是,如果你的免费调试器不起作用,否则你需要花费数百美元,那么这确实是一个选项,我可能会有兴趣听听。 - LWChris
public
是否未使用,必须搜索整个代码库。但是,对于未使用的内部和私有成员,只要启用了适当的警告,代码分析就会发出警告。 - Matthew WatsonEquals
方法的存在。删除一个 0 引用的Equals
不会导致构建错误,但是任何依赖它的方法将在运行时默默地产生错误结果。 - Tawab Wakil