【问题标题】:How do I customize Visual Studio's private field generation shortcut for constructors?如何为构造函数自定义 Visual Studio 的私有字段生成快捷方式?
【发布时间】:2018-01-25 23:02:49
【问题描述】:

VS 2017(可能还有更早的版本)为我提供了这个方便的小构造函数快捷方式来生成 private readonly 字段并分配它。

截图:

这最终会生成一个名为 userService 的私有成员,然后分配给它:

this.userService = userService;

这违背了我使用的代码风格,即使用前缀 _ 命名所有私有成员,导致分配应该如下所示:

_userService = userService;

我怎样才能使 VS 使用其代码生成快捷方式遵守此代码样式规则?

【问题讨论】:

  • 这个和sn-ps没有关系,这个功能是代码分析服务提供的。自添加 Roslyn 后可用。前导下划线违反了 .NET Framework 编程指南,您绝不会说服 Microsoft 程序员更改它。这是Resharper推的风格,他们不喜欢this.,因为这让程序员不买它,考虑使用它。
  • @HansPassant 我看到的每一段由微软团队编写的现代代码都遵循_camelCase私人成员的约定。查看CoreFX C# Coding Style GuidelinesASP.NET Core Coding Style 甚至Rosyln code itself...??
  • @HansPassant 好消息……有人成功说服一位微软程序员能够改变这一点。请参阅下面的答案。
  • 知道如何在 Visual Studio for Macs 中执行此操作吗?

标签: c# .net visual-studio


【解决方案1】:

这也可以直接在 Visual Studio 中实现。只需转到Tools -> Options -> Text Editor -> C# -> Code Style -> Naming

  1. 首先,您需要通过单击“管理命名样式”按钮定义新的命名样式:

  1. 然后单击 + 号为“私有或内部字段”定义一个新规则,该规则使用您的新命名样式:

  1. 重启 Visual Studio

  2. 之后,当您应用“创建和初始化字段”重构时,它将使用前导下划线命名。

【讨论】:

  • 我在 Visual Studio 15.8.8 上,这是唯一对我有用的答案。
  • 仅供参考:在此之后您可能需要重新启动 VS。
  • 在 VS 2019 中运行良好。
  • 并非所有英雄都穿着斗篷。很好的解释。效果很好!谢谢。
  • VS 2019 版本 16.5.4 无需重启
【解决方案2】:

.editorconfig 设置是 kspearrin 的答案对我不起作用我不得不使用这些(对于 VS2017 版本 15.4.0):

[*.{cs,vb}]
dotnet_naming_rule.private_members_with_underscore.symbols  = private_fields
dotnet_naming_rule.private_members_with_underscore.style    = prefix_underscore
dotnet_naming_rule.private_members_with_underscore.severity = suggestion

dotnet_naming_symbols.private_fields.applicable_kinds           = field
dotnet_naming_symbols.private_fields.applicable_accessibilities = private

dotnet_naming_style.prefix_underscore.capitalization = camel_case
dotnet_naming_style.prefix_underscore.required_prefix = _

我从这里得到这些:https://github.com/dotnet/roslyn/issues/22884#issuecomment-358776444

【讨论】:

  • 很奇怪。我现在正在使用 VS 2017 15.6,我原来的答案似乎仍然在那里工作。谁知道...
  • 我更新到 15.6.3,这个版本仍然适用于我。我使用的是社区版,也许你没有?
  • 很遗憾,上述设置在 web 项目中不起作用。
  • 由于某种原因,它也适用于 const?
【解决方案3】:

这可以通过创建您自己的 Roslyn 代码分析器命名规则来实现。在您的解决方案中添加 .editorconfig 以指定自定义命名约定。

在此处阅读有关它们的更多信息:https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference

要从问题中获得预期的效果,以下将起作用:

[*.{cs,vb}]
dotnet_naming_rule.private_members_with_underscore.symbols  = private_fields
dotnet_naming_rule.private_members_with_underscore.style    = prefix_underscore
dotnet_naming_rule.private_members_with_underscore.severity = suggestion

dotnet_naming_symbols.private_fields.applicable_kinds           = field
dotnet_naming_symbols.private_fields.applicable_accessibilities = private
dotnet_naming_symbols.private_fields.required_modifiers         = readonly

dotnet_naming_style.prefix_underscore.capitalization = camel_case
dotnet_naming_style.prefix_underscore.required_prefix = _

结果:

【讨论】:

  • 在我看来,这似乎是完成这项任务的漫长道路。请参阅@Maciek 的回复。
  • 这是我最初回答时的唯一方法。看起来他们现在为它添加了一个 UI。
  • 编辑 .editorconfig 是一个比通过 UI 更好的解决方案。
  • @Eric 恰恰相反。与在 Git 中签入 .editorconfig 文件并从那一刻起知道这一点相比,必须告诉团队中的每个成员手动以某种方式配置他们的 VS 肯定要长得多、乏味且容易出错关于每个人的设置都会自动调整以遵循项目的编码风格。
  • 很遗憾,上述设置在 web 项目中不起作用。
猜你喜欢
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 2011-04-21
  • 2012-02-12
  • 1970-01-01
  • 2012-06-21
  • 2016-01-09
  • 1970-01-01
相关资源
最近更新 更多