¿Cómo personalizo el acceso directo de generación de campos privados de Visual Studio para constructores?

120

VS 2017 (y tal vez versiones anteriores) me brinda este práctico atajo de constructor para generar un private readonlycampo y asignarlo.

Captura de pantalla:

ingrese la descripción de la imagen aquí

Esto termina generando un miembro privado llamado userServicey luego lo asigna con:

this.userService = userService;

Esto va en contra del estilo de código que uso, que consiste en nombrar a todos los miembros privados con un prefijo que _da como resultado una asignación que debería verse así:

_userService = userService;

¿Cómo puedo hacer que VS obedezca esta regla de estilo de código con sus accesos directos de generación de código?

kspearrin
fuente
Esto no tiene nada que ver con los fragmentos, esta función la proporciona el servicio de análisis de código. Disponible desde que se agregó Roslyn. Un subrayado inicial es una violación de la Guía de programación de .NET Framework, de ninguna manera va a convencer a un programador de Microsoft para que cambie esto. Es un estilo impulsado por Resharper, no les gusta this.porque eso hace que el programador no lo compre, considere usarlo.
Hans Passant
18
@HansPassant Cada pieza de código moderno que he visto producido por los equipos de Microsoft sigue esta _camelCaseconvención para miembros privados. Ver el CoreFX C # Estilo de código Directrices , ASP.NET Core Estilo de código e incluso propio código Rosyln ... ??
kspearrin
5
@HansPassant Buenas noticias ... alguien logró convencer a un programador de Microsoft para que pudiera cambiar esto. Vea la respuesta a continuación.
kspearrin
¿Alguna idea de cómo hacer esto en Visual Studio para Mac?
Jason V

Respuestas:

229

Esto también se puede lograr directamente en Visual Studio. Solo ve a Tools -> Options -> Text Editor -> C# -> Code Style -> Naming.

  1. En primer lugar, debe definir un nuevo estilo de denominación haciendo clic en el botón "Administrar estilos de denominación":

VS2017 Diálogo de estilo de nomenclatura

  1. Luego haga clic en el signo + para definir una nueva regla para "Campo privado o interno", que usa su nuevo estilo de nomenclatura:

Cuadro de diálogo Opciones de VS2017

  1. Reinicie Visual Studio

  2. Después de eso, cuando aplique la refactorización "Crear e inicializar campo", será nombrado con un guión bajo al principio.

Maciek
fuente
Estoy en Visual Studio 15.8.8 y esta fue la única respuesta aquí que funcionó para mí.
Jonathan Taylor
25
FYI: Es posible que deba reiniciar VS después de esto.
Jeff
9
Funciona bien en VS 2019.
Matt Stannett
3
No todos los héroes usan capa. Gran explicación ¡Funciona genial! Gracias.
datoml
1
No se requiere reinicio en VS 2019 Versión 16.5.4
Douglas HM
32

La configuración .editorconfig es la respuesta de kspearrin no funcionó para mí, tuve que usar estos (para VS2017 Versión 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 = _

Obtuve estos de aquí: https://github.com/dotnet/roslyn/issues/22884#issuecomment-358776444

michael_hook
fuente
Extraño. Ahora estoy usando VS 2017 15.6 y mi respuesta original todavía parece funcionar allí. Quién sabe ...
kspearrin
Actualicé a 15.6.3 y esta versión todavía funciona para mí. Estoy usando la edición de la comunidad, ¿quizás tú no?
michael_hook
No puedo hacer que ninguno funcione, estoy usando VS Pro 2017 versión 15.6.4
Eric Schneider
1
siguiendo esto también: docs.microsoft.com/en-us/visualstudio/ide/…
Eric Schneider
Este funcionó para mí cuando la respuesta aceptada no lo hizo. VS Pro 15.7.5
Licht
24

Esto se puede lograr creando su propia regla de nomenclatura Roslyn Code Analyzer. Agregue un .editorconfigen su solución para especificar convenciones de nomenclatura personalizadas.

Lea más sobre ellos aquí: https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference

Para obtener el efecto deseado de la pregunta, funcionará lo siguiente:

[*.{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 = _

Resultado:

ingrese la descripción de la imagen aquí

kspearrin
fuente
Este me parece el camino más largo para lograr esta tarea. Consulte la respuesta de @Maciek.
Eric
Este fue el único camino de regreso cuando respondí originalmente. Parece que agregaron una interfaz de usuario ahora.
kspearrin
1
Editar .editorconfig es una solución mucho mejor que hacerlo a través de la interfaz de usuario.
gliljas
@Eric Es al revés. Tener que decirle a cada miembro de su equipo que configure su VS de cierta manera a mano es definitivamente mucho más largo, tedioso y propenso a errores que registrar un .editorconfigarchivo en Git y saber que a partir de ese momento todos tendrán su configuración ajustada automáticamente para seguir el estilo de codificación del proyecto.
Daniel Liuzzi