VS2019 16.4.2中.editorconfig C#命名规则不生效求助
.editorconfig命名规则在Visual Studio 16.4.2中不符合预期的问题排查
我最近在解决方案级别用.editorconfig给两个C#项目定义命名规则,刚把Visual Studio更到最新的16.4.2版本,结果工具提示的警告完全不对劲儿:类名、属性名、枚举名居然提示要小写开头,但我明明配置的是Pascal命名法;私有字段我设的是下划线开头,也收到错误提示。我确认编辑器加载了我的.editorconfig,因为改配置的时候提示会变,但结果就是不符合预期。想问下是不是要额外设置?还是我的配置有问题?
以下是我的.editorconfig相关内容:
# Naming rules definitions dotnet_naming_rule.interfacesPascalWithI.symbols = interfaces dotnet_naming_rule.interfacesPascalWithI.style = IP dotnet_naming_rule.interfacesPascalWithI.severity = suggestion dotnet_naming_rule.publicMethodsPascal.symbols = pubMethods dotnet_naming_rule.publicMethodsPascal.style = P dotnet_naming_rule.publicMethodsPascal.severity = suggestion dotnet_naming_rule.defaultMethodsCamel.symbols = methods dotnet_naming_rule.defaultMethodsCamel.style = c dotnet_naming_rule.defaultMethodsCamel.severity = suggestion dotnet_naming_rule.staticFieldsPascal.symbols = staticFields dotnet_naming_rule.staticFieldsPascal.style = c dotnet_naming_rule.staticFieldsPascal.severity = warning dotnet_naming_rule.constFieldsPascal.symbols = constFields dotnet_naming_rule.constFieldsPascal.style = c dotnet_naming_rule.constFieldsPascal.severity = warning dotnet_naming_rule.privateFieldsUnderscore.symbols = prvFields dotnet_naming_rule.privateFieldsUnderscore.style = _c dotnet_naming_rule.privateFieldsUnderscore.severity = suggestion dotnet_naming_rule.defaultFieldsCamel.symbols = fields dotnet_naming_rule.defaultFieldsCamel.style = c dotnet_naming_rule.defaultFieldsCamel.severity = suggestion dotnet_naming_rule.defaultPascal.symbols = default dotnet_naming_rule.defaultPascal.style = P dotnet_naming_rule.defaultPascal.severity = suggestion # Style Definitions dotnet_naming_style.P.capitalization = pascal_case dotnet_naming_style.IP.capitalization = pascal_case dotnet_naming_style.IP.required_prefix = I dotnet_naming_style.c.capitalization = camel_case dotnet_naming_style._c.capitalization = camel_case dotnet_naming_style._c.required_prefix = _ # Symbols Definitions dotnet_naming_symbols.default.applicable_kinds = * dotnet_naming_symbols.default.applicable_accessibilities = * dotnet_naming_symbols.interfaces.applicable_kinds = interface dotnet_naming_symbols.interfaces.applicable_accessibilities = * dotnet_naming_symbols.pubMethods.applicable_kinds = method dotnet_naming_symbols.pubMethods..applicable_accessibilities = public dotnet_naming_symbols.methods.applicable_kinds = method dotnet_naming_symbols.methods.applicable_accessibilities = * dotnet_naming_symbols.staticFields.applicable_kinds = field dotnet_naming_symbols.staticFields.applicable_accessibilities = * dotnet_naming_symbols.staticFields.required_modifiers = static dotnet_naming_symbols.constFields.applicable_kinds = field dotnet_naming_symbols.constFields.applicable_accessibilities = * dotnet_naming_symbols.constFields.required_modifiers = const dotnet_naming_symbols.prvFields.applicable_kinds = field dotnet_naming_symbols.prvFields.applicable_accessibilities = private dotnet_naming_symbols.fields.applicable_kinds = field dotnet_naming_symbols.fields.applicable_accessibilities = *
问题排查与修正方案
我仔细检查了你的配置,发现几个关键问题,这应该就是规则不生效的根源:
1. 符号定义里的拼写错误
你在pubMethods的可访问性配置里多打了一个点:
dotnet_naming_symbols.pubMethods..applicable_accessibilities = public
这个错误会导致该规则完全失效,改成下面这样即可:
dotnet_naming_symbols.pubMethods.applicable_accessibilities = public
2. 规则优先级顺序错误
在.editorconfig中,后定义的规则优先级更高。你把通用的defaultFieldsCamel规则放在了privateFieldsUnderscore之后,导致通用规则覆盖了私有字段的特殊规则。需要把更具体的规则(比如私有字段)放在通用规则的后面。
3. 静态/常量字段的规则配置颠倒
你给staticFieldsPascal和constFieldsPascal指定的样式是c(小驼峰),但规则名称是Pascal,明显和你的预期相反。如果你想让静态/常量字段使用Pascal命名,需要把style = c改成style = P。
修正后的完整配置
# Naming rules definitions # 通用Pascal规则(放在最前面,作为基础) dotnet_naming_rule.defaultPascal.symbols = default dotnet_naming_rule.defaultPascal.style = P dotnet_naming_rule.defaultPascal.severity = suggestion # 接口命名规则 dotnet_naming_rule.interfacesPascalWithI.symbols = interfaces dotnet_naming_rule.interfacesPascalWithI.style = IP dotnet_naming_rule.interfacesPascalWithI.severity = suggestion # 公共方法Pascal规则 dotnet_naming_rule.publicMethodsPascal.symbols = pubMethods dotnet_naming_rule.publicMethodsPascal.style = P dotnet_naming_rule.publicMethodsPascal.severity = suggestion # 普通方法小驼峰规则 dotnet_naming_rule.defaultMethodsCamel.symbols = methods dotnet_naming_rule.defaultMethodsCamel.style = c dotnet_naming_rule.defaultMethodsCamel.severity = suggestion # 常量字段Pascal规则 dotnet_naming_rule.constFieldsPascal.symbols = constFields dotnet_naming_rule.constFieldsPascal.style = P dotnet_naming_rule.constFieldsPascal.severity = warning # 静态字段Pascal规则 dotnet_naming_rule.staticFieldsPascal.symbols = staticFields dotnet_naming_rule.staticFieldsPascal.style = P dotnet_naming_rule.staticFieldsPascal.severity = warning # 通用字段小驼峰规则 dotnet_naming_rule.defaultFieldsCamel.symbols = fields dotnet_naming_rule.defaultFieldsCamel.style = c dotnet_naming_rule.defaultFieldsCamel.severity = suggestion # 私有字段下划线小驼峰规则(放在最后,优先级最高) dotnet_naming_rule.privateFieldsUnderscore.symbols = prvFields dotnet_naming_rule.privateFieldsUnderscore.style = _c dotnet_naming_rule.privateFieldsUnderscore.severity = suggestion # Style Definitions dotnet_naming_style.P.capitalization = pascal_case dotnet_naming_style.IP.capitalization = pascal_case dotnet_naming_style.IP.required_prefix = I dotnet_naming_style.c.capitalization = camel_case dotnet_naming_style._c.capitalization = camel_case dotnet_naming_style._c.required_prefix = _ # Symbols Definitions dotnet_naming_symbols.default.applicable_kinds = * dotnet_naming_symbols.default.applicable_accessibilities = * dotnet_naming_symbols.interfaces.applicable_kinds = interface dotnet_naming_symbols.interfaces.applicable_accessibilities = * dotnet_naming_symbols.pubMethods.applicable_kinds = method dotnet_naming_symbols.pubMethods.applicable_accessibilities = public dotnet_naming_symbols.methods.applicable_kinds = method dotnet_naming_symbols.methods.applicable_accessibilities = * dotnet_naming_symbols.staticFields.applicable_kinds = field dotnet_naming_symbols.staticFields.applicable_accessibilities = * dotnet_naming_symbols.staticFields.required_modifiers = static dotnet_naming_symbols.constFields.applicable_kinds = field dotnet_naming_symbols.constFields.applicable_accessibilities = * dotnet_naming_symbols.constFields.required_modifiers = const dotnet_naming_symbols.prvFields.applicable_kinds = field dotnet_naming_symbols.prvFields.applicable_accessibilities = private dotnet_naming_symbols.fields.applicable_kinds = field dotnet_naming_symbols.fields.applicable_accessibilities = *
额外的Visual Studio设置检查
除了配置文件,还需要确认VS的设置是否正确:
- 打开
工具 > 选项 > 文本编辑器 > C# > 代码样式 > 命名,确保启用.editorconfig支持选项已勾选 - 如果之前手动设置过命名规则,建议点击
重置为默认值,让.editorconfig的规则优先生效 - 最后重启Visual Studio,确保配置完全加载
内容的提问来源于stack exchange,提问作者user3424895
相关产品推荐
相关产品推荐

