代码分析

ReSharper在C#、VB.NET、XAML、XML、ASP.NET、ASP.NET MVC、ASP.NET Core、HTML、ResX 和 Protobuf 中提供了连续代码质量分析功能。 甚至可以在您编译之前立即检测到错误和问题。

Visual Studio中标记栏上的ReSharper代码检查

连续代码质量分析

ReSharper可以在设计时对您的代码应用2200多个代码检查,这样一来,您可以即时查看当前文件甚至整个解决方案是否包含任何错误或问题。

ReSharper会直接在Visual Studio编辑器中高亮显示检测到的错误和问题,并使用右侧的标记栏将其可视化。

如果文件包含错误或问题,标记栏顶部的状态指示器的颜色和图标会发生变化。 右键点击图标,您可以快速切换ReSharper代码分析、标识符高亮显示和Visual Studio代码分析,以及在严重性级别最高的问题之间导航。

ReSharper中的代码分析

错误

ReSharper可以在您编码时直接在编辑器中即时检测和高亮显示错误。

错误将使用红色字体或波浪下划线高亮显示。 如果您将鼠标指针悬停到错误上,将在工具提示中显示错误的描述。

ReSharper可以检测纯C#或VB.NET代码以及ASP.NET代码隐藏文件、标记文件中的引用和ASP.NET MVC调用中的错误。

对于XAML,ReSharper可以检查XML语法并熟练地验证XAM语义,包括XAML实体之间的引用。

在生成脚本(NAnt和MSBuild)中,ReSharper可以分析和高亮显示未知属性、目标、任务和特性。

代码检查也可以在 HTML 和 XML 中使用。

警告

除了编译器错误和警告外,ReSharper还会显示自己的警告,这些警告不会阻止代码编译,但可能会显著降低编码效率。 例如,ReSharper可以通知您注意冗余转换、不正确的格式字符串和已声明但从未使用的局部变量,等等。 具有关联警告的结构将使用灰色文本或蓝色波浪下划线强调。

建议

还可以进行更深层次的代码分析并提供代码建议。 建议可以让您深入了解代码结构,注意那些并不一定糟糕或错误,但是有必要了解的代码。 建议将用绿色波浪下划线高亮显示。

例如,您可能想要知道某个参数是否可以使用基类型声明,如果可以,则表示您的方法仅使用参数基类型的成员。 ReSharper还可在以下情况下提供建议:从带有支持字段的属性创建自动属性,将静态方法调用转换成扩展方法调用,或者尽可能使用“var”关键字。

提示

代码高亮显示严重性侵入级别最低的是提示。 与错误、警告和建议不同,导航到下一个或上一个高亮显示时不会考虑提示,提示也不会在标记栏中显示,因此不会影响状态指示器的颜色。

提示会让您注意特定代码详细信息,并建议改进方式。 具有关联提示的代码项将使用绿色的虚下划线高亮显示。

ReSharper中针对代码问题的快速修复

代码问题的快速修复

ReSharper 提供了 1200 多个快速修复,可以帮助您快速修复在所有支持的语言中检测到的大多数代码问题。 应用快速修复非常简单:只需在高亮显示的代码问题处按Alt+Enter,然后选择适当的方式来修复问题或改进次优代码。

Alt text

解决方案级检查

解决方案级警告和建议可以帮助您随时检测未使用的非私有成员。 只有让ReSharper分析整个解决方案后,这些检查才会运行。 查找您的代码中和标记栏上高亮显示的问题。 具体而言,您可以发现以下问题:

  • 未使用的非私有声明。
  • 非私有方法的未使用返回值。
  • 没有访问过的非私有字段。
  • 非私有成员中的未使用参数。
  • 从未调用过的抽象或虚拟事件。
  • 未分配的字段。
  • 可以设为内部而非公开的成员和类型。

此外,您还可以使用代码注释标记某些非私有类型和成员(如果它们被故意未使用),防止 ReSharper 处理它们。

禁用和配置代码检查项

您可以随时更改不同分析项的严重性 - 例如,让ReSharper按照您的个人编码风格或公司要求将特定检查/通知显示为错误、警告、代码建议或提示。
甚至,有时候您自己最清楚某段代码完全可以,不需要警告,因此,您可以直接禁用某个警告。

要禁用或配置代码检查项,请使用ReSharper选项的Code Inspection | Inspection Severity页面。 您还可以在操作列表中使用Options for inspection菜单配置特定的警告、建议或提示,操作列表可以通过按Alt+Enter调用。

每个错误、警告或建议都通过标记栏上不同的指示条表示。 点击指示条可以直接转到包含错误或引发警告/建议的代码行。

您可以按Alt+PageDown(向前)和Alt+PageUp(向后),在错误、警告和建议之间导航。 您还可以按Shift+Alt+PageDown(转到下一个错误)和Shift+Alt+PageUp(转到上一个错误),仅在错误之间导航(跳过任何警告和建议)。 将在状态栏中显示一条描述当前错误、警告或建议的消息。

还可以通过另一种方式在代码问题之间导航:您可以在特定范围内查找所有代码问题,并在专用工具窗口中查看。

高亮显示与某个搜索模式匹配的代码并使用替代模式替换

自定义代码检查

ReSharper 提供了 Structural Search 和 Structural Replace,用于查找与某个模式匹配的代码,并选择性地将其替换为与另一个模式匹配的代码。 更令人兴奋的是,ReSharper 可以通过高亮显示与您的搜索模式匹配的代码来持续按照这些模式监控解决方案,并提供快速修复,根据您的替代模式替换代码。

这在本质上意味着,您可以使用自定义检查扩展 ReSharper 的代码检查组合。 例如,如果要迁移到较新版本的框架,您可以创建搜索模式来查找旧API的用法,并替换模式以引入更新的API。

检测整个解决方案中的错误

通过解决方案级分析监控错误

ReSharper不仅能够分析设计时中的打开文件,还可扩展其分析能力以覆盖整个解决方案。

假设您将某个成员的可见性从公开改为内部,并假设此成员仅在当前程序集内使用。 现阶段,ReSharper在当前文件中没有找到错误。 然后,开启解决方案级分析,ReSharper会发现某些地方出错。 您可以跳到解决方案中的下一个错误,并发现有人在当前项目外部使用了此成员。

您需要做的就是明确开启解决方案级分析,在此功能分析您的解决方案的代码后,使用专用窗口查看错误列表。

即使不打开该窗口,您仍然可以使用Go to Next Error/Warning in SolutionShift+Alt+PageDown)和Go to Previous Error/Warning in SolutionShift+Alt+F12)命令,在解决方案中的错误之间轻松导航。

解决方案级分析中的警告

通过解决方案级分析监控警告

在解决方案中的最后一个错误得到修复后,红色的状态栏指示灯将变为绿色。 不过,解决方案级分析可以帮助您进一步提高解决方案中代码的质量 - 在错误视图中点击 Include Warnings ,ReSharper 将开始监控整个解决方案中的警告(编译器警告和 ReSharper 的检查检测到的 Warning 严重性级别的问题)。

如果错误在您的解决方案中再次出现,警告将自动隐藏,从而让您将精力放在修复错误上。 在所有错误均得到修复后,警告将再次显示。

Call Tracking

过去,尝试跟踪代码中的调用序列可能会打开多个Find Results窗口并丢失上下文。 为了解决此问题,ReSharper可以在单个工具窗口中将整个调用序列可视化。 此功能称为Call Tracking,让您可以查看代码中的调用链并进行导航。

得益于对事件、接口和闭包的支持,ReSharper的Call Tracking较Visual Studio自有的调用层次结构有明显的改进。

要可视化调用序列,请选择 ReSharper | Inspect | Outgoing CallsReSharper | Inspect | Incoming Calls,或者使用 Inspect This 快捷功能。

查找代码问题

ReSharper让您可以在单个工具窗口(名为Inspection Results)中查找所有代码质量问题、冗余、语言使用机会和代码改进建议。

要查找特定范围内的代码问题,请选择ReSharper | Inspect | Code Issues in SolutionReSharper | Inspect | Code Issues in Current Project。 或者,在Solution Explorer中选择节点,点击右键,然后选择Find Code Issues

Inspection Results窗口让您可以筛选检测到的问题,按照问题类型、严重性、类别和其他属性对结果进行重新分组,并将结果导出到文件中。

Value Tracking

值跟踪可为您提供程序中数据流的重要相关信息。 在源代码中的任何位置,您可以指向变量、参数、字段或属性,并要求ReSharper进行检查。 然后,您会看到它的值如何在程序中流动,返回到它的源或直接流到消费者。

值跟踪可以帮助您确定不正确的特定值如何传递到程序中的特定点,以及它可能继续传到的位置。 这将有助于您调查可能的NullReferenceExceptions、不恰当的行为和您获得不正确值的原因。

要可视化包含特定值的数据流,请选择 ReSharper | Inspect | Value OriginReSharper | Inspect | Value Destination,或者使用 Inspect This 快捷键功能。

代码注释

有时候,即使强大如ReSharper的代码分析引擎,也无法检测某些问题。 例如,如果将方法设计为从不返回null,而且也相应地设计其客户端,则在有人更改返回null的方法时,代码分析将无法发现可能的问题。

在这一情况和其他许多情况下,JetBrains.Annotations框架有助于发现利用其他方法无法推断的问题。 此框架中声明的特性能够让ReSharper按照您需要的方式分析代码。

要在您的源代码中使用 ReSharper 代码注释特性,请安装相应的 NuGet 包。 您只需添加 using JetBrains.Annotations; 指令,ReSharper 将会自动帮助您获取包。

Inspect This

Inspect ThisCtrl+Shift+Alt+A)是结合了代码分析和导航的多个 ReSharper 功能的快捷键,包括 Call TrackingValue TrackingType HierarchyType Dependency Diagram

快捷键注释

本页面提供的所有键盘快捷键都在 ReSharper 的默认“Visual Studio”按键映射中。 有关 ReSharper 两种按键映射的详细信息,请参阅 ReSharper 文档