命名样式
ReSharper 帮助您定义、控制并应用代码中符号的所需命名样式。 有一组规则,每条规则针对具有特定约束的标识符(例如,一条规则可以针对静态私有只读字段)。 每条规则可以有一个或多个关联样式,这些样式定义了复合词的大小写、下划线、后缀、前缀等。
当 ReSharper 使用 代码补全和 代码生成功能生成新代码时,应用 代码模板或执行 重构时,这些规则都会被考虑在内。 ReSharper 还可以帮助您 检测并修复命名规则的违规情况。 如果需要,可以 配置或禁用命名规则的自动检查。
配置命名规则
开箱即用,ReSharper 提供了一组涵盖所有类型标识符的命名规则。 这些规则基于 Microsoft 命名指南、 .NET 平台编码样式以及各种最佳实践。
如果您的个人偏好或公司标准与 ReSharper 的默认值不同,您可以灵活地配置命名样式:对于每种类型的标识符,您可以选择大小写规则、前缀和后缀、不同访问权限的变体、要忽略的缩写等。
您的命名样式偏好通过 基于层的设置机制保存。 除此之外,该机制还允许您为不同的解决方案维护不同的偏好,并将这些偏好保存在 VCS 中,自动与团队成员共享。
命名规则的属性
每条命名规则具有以下属性:
规则描述 :一个任意描述,帮助理解规则的适用范围。
应用此样式 :规则允许的一个或多个命名样式。 使用相应的按钮添加或删除样式。
当列表中选择了一个样式时,在 样式 选择器中选择基础样式,例如
UpperCamelCase或lowerCamelCase,并可选地添加前缀和后缀。当单条规则有多个样式时,如果符号名称至少与其中一个样式匹配,ReSharper 不会 报告代码样式违规。 否则,ReSharper 会检测到代码样式违规,并建议根据默认样式(列表中的第一个样式)重命名符号。 要更改默认样式,请使用 上移
和 下移
按钮。至以下元素 :此区域定义命名规则的适用范围。 使用相应的复选框指定必须符合规则的类型和具有哪些修饰符的成员。
启用检查 :此复选框允许您禁用与此规则相关的 代码样式违规报告 ,同时仍允许 ReSharper 检测其他命名规则违规。
当此复选框被禁用时,ReSharper 在使用 代码补全和 代码生成功能生成新代码时,应用 代码模板并执行 重构时,仍会遵守该规则。 还有几种方法可以 禁用所有命名规则的自动检查。

修改命名规则
执行以下操作之一:
在具有不一致命名的高亮符号上按下 Alt+Enter ,然后选择 检查“命名不一致” | 更改命名规则“[规则名称]”的设置。
从主菜单中选择 ,选择所需的规则,然后单击 编辑
或双击它。
根据需要配置命名规则的 属性。
如果规则编辑器是从选项对话框中打开的,请单击 确定 关闭 编辑规则设置 对话框。
单击 选项 对话框中的 保存 应用修改,让 ReSharper 选择保存位置,或者通过从 保存到 选择器中选择特定的设置层来保存修改。 有关更多信息,请参见 管理和共享 resharper 设置。
如果现有规则对您的命名约定不够细化,您可以添加更多规则。 例如,您可能希望枚举具有大写驼峰命名法并带有 E 前缀。
添加命名规则
从主菜单中选择 或按 Alt+R O ,然后在左侧选择 。
单击 '+'.
根据需要配置命名规则的 属性。
单击 确定 关闭 添加命名规则 对话框。
单击 选项 对话框中的 保存 应用修改,让 ReSharper 选择保存位置,或者通过从 保存到 选择器中选择特定的设置层来保存修改。 有关更多信息,请参见 管理和共享 resharper 设置。
任何命名规则都可以被移除。 移除规则的潜在后果是某些类型的标识符将不受任何规则的覆盖。 在这种情况下,当 ReSharper 使用 代码补全和 代码生成功能生成新代码时,应用 代码模板并执行 重构时,ReSharper 将应用其内部默认值。
要移除规则,请在 ReSharper 选项 页上选择它,然后单击
Alt+R, O
Delete
。
使用 EditorConfig 配置命名规则
如果您 使用 EditorConfig来维护项目的代码样式,您还可以从 .editorconfig 文件中配置命名规则。
要从 EditorConfig 配置命名规则,您需要在 ReSharper 选项 页上选择 从 editorconfig 和项目设置中读取设置 复选框 Alt+R, O 。
您还可以将已在 ReSharper 设置中配置的命名样式 导出到一个 .editorconfig 文件。
.editorconfig 文件中的命名样式设置是使用 .NET 命名约定的属性配置的: dotnet_naming_rule.*、 dotnet_naming_style.*、 dotnet_naming_symbols.*——如果指定的 符号类型可以与 ReSharper 命名设置中可用的符号类型匹配,则会生效。
此外,ReSharper 可以使用许多自定义属性来支持 .NET 命名约定未涵盖的情况。 这些属性主要出现在您导出 ReSharper 命名设置时的 .editorconfig 文件中。
import_to_resharper此后缀允许指定是否应由 ReSharper 忽略特定属性(
true或false)。当 ReSharper 将其设置导出到 editorconfig 时,它还可能写入
as_predefined——请勿手动更改。 示例:dotnet_naming_rule.protected_rule_rule.import_to_resharper = falseresharper_description允许为工具提示指定规则描述。 示例:
dotnet_naming_rule.protected_rule_rule.resharper_description = Somethingresharper_guidReSharper 在导出时可以使用此属性,请勿手动更改。 示例:
dotnet_naming_rule.protected_rule_rule.resharper_guid = eb5720f3-bc0a-442d-9f3c-8dc32b7c5c12resharper_style允许指定可能的样式列表,这些样式可以扩展 .NET 命名样式列表。 每种样式可以是 "style" 或 "prefix + style + suffix" 或 "prefix + style" 或 "style + suffix"。
样式可以是以下之一:
AaBb、AaBb_AaBb、AaBb_aaBb、aaBb、aaBb_AaBb、aaBb_aaBb、AA_BB、aa_bb、Aa_bb您可以在列表末尾添加
:do_not_check以禁用检查。示例:
dotnet_naming_rule.protected_rule_rule.resharper_style = AA_BB, aa_bb, I+AaBb, aaBb_AaBb, AaBb+Localresharper_applicable_kinds应用命名规则的标识符类型:
namespace、type、test_type、class、pure_class、record、struct、interface、delegate、enum、type_member、test_member、method、async_method、extension_method、property、event、any_field、field(简单字段,非只读或常量)、readonly_field、constant_field、unity_serialised_field(如果安装了 Unity Support插件)、enum_memberlocal、local_variable、catch_variable、local_constant、parameter、lambda_parameter、label、type_parameter、local_function示例:
dotnet_naming_symbols.protected_rule_symbols.resharper_applicable_kinds = pure_classresharper_required_modifiersstatic、instance(无、其中之一或两者)。 示例:dotnet_naming_symbols.protected_rule_symbols.resharper_required_modifiers = static, instanceresharper_csharp_naming_rule使用与
resharper_style相同的值,但此设置只能用于指定预定义规则之一:types_and_namespaces、interfaces、type_parameters、method、property、event、locals、local_constants、parameters、public_fields、private_instance_fields、private_static_fields、constants、private_constants、static_readonly、private_static_readonly、enum_member、local_functions、other示例:
resharper_csharp_naming_rule.private_instance_fields = I+AaBb_AaBb,_+aaBb:do_not_check
根据 EditorConfig 约定,ReSharper 将应用定义在名为 .editorconfig 的文件中的命名规则,这些文件位于当前文件的目录及其所有父目录中,直到到达根文件路径或找到带有 root=true 的 EditorConfig 文件。 在 .editorconfig 文件中指定的文件掩码,例如 *Test.cs ,也会被考虑。
忽略与 CamelCase 命名样式冲突的大写缩写
有时,您可能希望在 CamelCase 符号名称中使用大写缩写、首字母缩略词或首字母缩写(例如 MS 表示 MicroSoft)。 默认情况下,ReSharper 报告这为不一致的驼峰命名,因为有多个大写字母连续出现:
![]()
为避免这种情况,您可以配置要忽略的不一致命名检查的缩写列表。
需要注意的是,大写缩写不应与为特定标识符类型定义的命名样式相矛盾。
例如,如果您将 MS 添加到忽略的缩写中, MSBuilder 将是具有 UpperCamelCase 样式的标识符的可接受名称,但不适用于具有 lowerCamelCase 或 all_lower 命名样式的标识符。
同样, myMSBuilder 对于 lowerCamelCase 是可以的,但不适用于 UpperCamelCase 样式的标识符。
将缩写添加到忽略列表
如果您有许多应允许在符号名称中使用的缩写,可以编辑忽略的缩写列表。
编辑忽略的缩写列表
从主菜单中选择 或按 Alt+R O ,然后在左侧选择 。
单击 ... ,位于 缩写 旁边。
输入一个缩写并单击 添加。 对所有必要的缩写重复此操作,然后单击 确定。
或者,手动编辑 缩写 字段,使用空格作为分隔符。
单击 选项 对话框中的 保存 应用修改,让 ReSharper 选择保存位置,或者通过从 保存到 选择器中选择特定的设置层来保存修改。 有关更多信息,请参见 管理和共享 resharper 设置。
检测并修复命名规则的违规
ReSharper 使用“不一致命名”代码检查来检测代码中命名规则的违规。 默认情况下,此检查始终在 设计时代码检查期间应用,并在编辑器中将检测到的违规高亮为 警告。 例如,根据默认样式,接口的名称应具有 'I' 前缀。 如果接口名称不符合此规则,ReSharper 会高亮显示此名称,并在您将鼠标悬停在其上时通知您问题所在:

如果您想查找当前文件之外的命名样式违规,可以在项目或整个解决方案中运行“不一致命名”检查。
在特定范围内查找命名样式违规
对于编辑器中高亮显示的大多数命名样式违规,ReSharper 会建议一个具有符合命名的 快速修复。 您可以按下 Alt+Enter 并在操作列表中选择 重命名为 [符合规范的名称]。

也可以在当前文件、项目或解决方案中使用 范围内修复功能自动修正命名样式违规。
但是,如果具有计算出的符合命名的符号已存在于同一命名空间中,则不会建议快速修复。 您可以使用 重命名重构 修复此类符号的命名。
配置和禁用命名规则的自动检查
如果您不希望 ReSharper 检查现有代码库中的命名样式,您可以禁用负责此检查的代码检查,或者禁用特定规则的自动检查。 但是,即使禁用了自动检查,当 ReSharper 使用 代码补全和 代码生成功能生成新代码时,应用 代码模板并执行 重构时,所有命名规则仍会被遵守。
禁用命名样式的自动检查
在具有不一致命名的高亮符号上按下 Alt+Enter ,然后选择 检查“命名不一致” | 配置检查严重性 | 不显示。
清除 ReSharper 选项 页上的 启用“命名不一致”检查 复选框 Alt+R, O 。
On the page of ReSharper 选项 Alt+R, O , start typing 'Inconsistent Naming', and then clear the checkbox next to the corresponding code inspection.
如果您在解决方案中 使用 .editorconfig ,您可以在特定范围内禁用 “不一致命名”检查:
resharper_inconsistent_naming_highlighting=none
禁用特定命名规则的自动检查
执行以下操作之一:
在具有不一致命名的高亮符号上按下 Alt+Enter ,然后选择 检查“命名不一致” | 更改命名规则“[规则名称]”的设置。
从主菜单中选择 ,选择所需的规则,然后单击 编辑
或双击它。
在打开的 编辑规则设置 对话框中,清除 启用检查 复选框。
单击 选项 对话框中的 保存 应用修改,让 ReSharper 选择保存位置,或者通过从 保存到 选择器中选择特定的设置层来保存修改。 有关更多信息,请参见 管理和共享 resharper 设置。
从现有代码中使用 C# 命名规则
如果您从公共仓库检出解决方案或临时加入一个已建立不同代码命名样式的团队,您可能希望遵循此解决方案中的命名规则,但同时不更改全局配置的命名规则。
ReSharper 会自动处理此类情况——当您打开一个符号命名与全局设置不同的新解决方案时,它会检测与全局设置不同的命名规则,相应地修改这些规则,然后将修改后的规则保存到 “解决方案个人”设置层 ( .sln.DotSettings.user 文件位于解决方案旁边)。
如果在打开新解决方案时发生这种情况,ReSharper 会在编辑器中显示通知:

您可以单击 配置 打开相应的设置页面()。 在此设置页面上,根据解决方案代码更改的规则会以黄色高亮显示。 如果您希望使用 ReSharper 的 默认命名规则或以自己的方式 配置命名样式 ,请清除 使用自动检测的规则 复选框。

处理 Visual Studio 中事件的命名样式
默认情况下,ReSharper 为字段上的事件订阅建议 $object$On$event$ 命名模式,为 this 上的事件订阅建议 On$event$ ,这些模式既用于 ReSharper 生成新事件时,也用于检查现有事件的命名样式。 如果需要,您可以在 ReSharper 选项 页上更改这些模式。
当 Visual Studio 生成新事件时,它使用另一种命名模式: $object$_$event$。 如果您有一个现有项目,其中事件以这种方式命名,并且您不想重命名它们,请确保 ReSharper 选项 页上的 支持 Microsoft 事件命名样式 复选框已选中。 这将抑制这些事件上的“不一致命名”警告。
在不同语言中的适用性
此功能在以下语言和技术中 受支持:
此处提供的说明和示例针对在 C# 中使用该功能。 有关其他语言的更多信息,请参阅 语言和框架 部分中的相应主题。



