Как настроить ярлык для создания частных полей в Visual Studio для конструкторов?


120

VS 2017 (и, возможно, более старые версии) дает мне этот удобный небольшой ярлык конструктора для создания private readonlyполя и его назначения.

Скриншот:

введите описание изображения здесь

В итоге создается закрытый член с именем, который userServiceзатем назначается:

this.userService = userService;

Это идет вразрез со стилем кода, который я использую, который заключается _в присвоении всем закрытым членам префикса, в результате чего присваивание должно выглядеть так:

_userService = userService;

Как я могу сделать так, чтобы VS подчинялся этому правилу стиля кода с помощью ярлыков генерации кода?


Это не имеет отношения к сниппетам, эта возможность предоставляется службой анализа кода. Доступно с момента добавления Roslyn. Верхнее подчеркивание - это нарушение Руководства по программированию .NET Framework, вы никоим образом не собираетесь уговаривать программиста Microsoft изменить это. Это стиль, продвигаемый Resharper, им не нравится, this.потому что это заставляет программиста не покупать его, подумайте о его использовании.
Ханс

18
@HansPassant Каждый вид современного кода, созданный командами Microsoft, следует этому _camelCaseсоглашению для частных участников. См CoreFX C # Coding Style Руководство , ASP.NET Сердечник Coding Style и даже Rosyln сам код ... ??
kspearrin

5
@HansPassant Хорошие новости ... кто-то успешно уговорил программиста Microsoft изменить это. См. Ответ ниже.
kspearrin

Есть идеи, как это сделать в Visual Studio для Mac?
Jason V

Ответы:


231

Этого также можно добиться непосредственно в Visual Studio. Просто зайдите в Tools -> Options -> Text Editor -> C# -> Code Style -> Naming.

  1. Во-первых, вам нужно определить новый стиль именования, нажав кнопку «Управление стилями именования»:

Диалог стиля именования VS2017

  1. Затем щелкните знак +, чтобы определить новое правило для «Частного или внутреннего поля», которое использует ваш новый стиль именования:

Диалоговое окно "Параметры VS2017"

  1. Перезапустите Visual Studio

  2. После этого, когда вы примените рефакторинг «Создать и инициализировать поле», ему будет присвоено имя с ведущим подчеркиванием.


Я использую Visual Studio 15.8.8, и это был единственный ответ, который у меня сработал.
Джонатан Тейлор

25
К вашему сведению: возможно, вам придется перезапустить VS после этого.
Джефф

9
Хорошо работает в VS 2019.
Мэтт

3
Не все герои носят плащи. Отличное объяснение. Прекрасно работает! Спасибо.
datoml

1
В VS 2019 версии 16.5.4 перезапуск не требуется
Дуглас Х.М.

32

Настройки .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


Weird. Теперь я использую VS 2017 15.6, и мой исходный ответ, похоже, все еще работает. Кто знает ...
kspearrin

Я обновился до 15.6.3, и эта версия у меня все еще работает. Я использую версию от сообщества, может быть, нет?
michael_hook

Я не могу заставить работать, я использую VS Pro 2017 версии 15.6.4
Эрик Шнайдер


Этот сработал для меня, когда принятый ответ - нет. VS Pro 15.7.5
Licht

24

Это может быть достигнуто путем создания собственного правила именования Roslyn Code Analyzer. Добавьте .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.
Эрик

Когда я первоначально ответил, это был единственный путь назад. Похоже, они добавили для него пользовательский интерфейс.
kspearrin

1
Редактирование .editorconfig - гораздо лучшее решение, чем редактирование через пользовательский интерфейс.
gliljas

@ Эрик Это наоборот. Необходимость указывать каждому члену вашей команды настраивать их VS определенным образом вручную определенно намного дольше, утомительнее и подвержено ошибкам, чем проверка .editorconfigфайла в Git и знание того, что с этого момента все настройки будут автоматически изменены, чтобы следовать стиль кодирования проекта.
Даниэль Лиуцци,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.