Comment personnaliser le raccourci de génération de champ privé de Visual Studio pour les constructeurs?

120

VS 2017 (et peut-être les versions plus anciennes) me donne ce petit raccourci de constructeur pratique pour générer un private readonlychamp et l'assigner.

Capture d'écran:

entrez la description de l'image ici

Cela finit par générer un membre privé appelé userService, puis l'affecte avec:

this.userService = userService;

Cela va à l'encontre du style de code que j'utilise qui consiste à nommer tous les membres privés avec un préfixe _résultant en une affectation qui devrait ressembler à:

_userService = userService;

Comment puis-je faire en sorte que VS obéisse à cette règle de style de code avec ses raccourcis de génération de code?

kspearrin
la source
Cela n'a rien à voir avec les extraits de code, cette fonctionnalité est fournie par le service d'analyse de code. Disponible depuis l'ajout de Roslyn. Un trait de soulignement principal est une violation de la directive de programmation .NET Framework, il est impossible que vous parliez à un programmeur Microsoft de changer cela. C'est un style poussé par Resharper, ils n'aiment pas this.parce que cela empêche le programmeur de l'acheter, envisagez de l'utiliser.
Hans Passant
18
@HansPassant Chaque morceau de code moderne que j'ai vu produit par les équipes de Microsoft respecte cette _camelCaseconvention pour les membres privés. Voir la CoreFX C # Style de codage Directives , ASP.NET de base Style de codage et même le code Rosyln lui - même ... ??
kspearrin
5
@HansPassant Bonne nouvelle ... quelqu'un a réussi à convaincre un programmeur Microsoft de pouvoir changer cela. Voir la réponse ci-dessous.
kspearrin
Une idée comment faire cela dans Visual Studio pour Mac?
Jason V

Réponses:

231

Cela peut également être réalisé directement dans Visual Studio. Allez à Tools -> Options -> Text Editor -> C# -> Code Style -> Naming.

  1. Vous devez d'abord définir un nouveau style de dénomination en cliquant sur le bouton "Gérer les styles de dénomination":

Boîte de dialogue Style de dénomination VS2017

  1. Cliquez ensuite sur le signe + pour définir une nouvelle règle pour "Champ privé ou interne", qui utilise votre nouveau style de dénomination:

Boîte de dialogue Options VS2017

  1. Redémarrez Visual Studio

  2. Après cela, lorsque vous appliquez le refactoring «Créer et initialiser le champ», il sera nommé avec un trait de soulignement en tête.

Maciek
la source
Je suis sur Visual Studio 15.8.8 et c'est la seule réponse ici qui a fonctionné pour moi.
Jonathan Taylor
25
FYI: Vous devrez peut-être redémarrer VS après cela.
Jeff
9
Fonctionne bien dans VS 2019.
Matt Stannett
3
Les héros ne portent pas tous des capes. Excellente explication. Fonctionne très bien! THX.
datoml
1
Aucun redémarrage requis dans VS 2019 Version 16.5.4
Douglas HM
32

Les paramètres .editorconfig sont que la réponse de kspearrin n'a pas fonctionné pour moi, j'ai dû les utiliser (pour VS2017 version 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 = _

Je les ai obtenus d'ici: https://github.com/dotnet/roslyn/issues/22884#issuecomment-358776444

michael_hook
la source
Bizarre. J'utilise maintenant VS 2017 15.6 et ma réponse originale semble toujours y fonctionner. Qui sait ...
kspearrin
J'ai mis à jour vers 15.6.3 et cette version fonctionne toujours pour moi. J'utilise l'édition communautaire, peut-être pas?
michael_hook
Je ne peux pas non plus travailler, j'utilise VS Pro 2017 version 15.6.4
Eric Schneider
1
à la suite de ceci également: docs.microsoft.com/en-us/visualstudio/ide/…
Eric Schneider
Celui-ci a fonctionné pour moi lorsque la réponse acceptée n'a pas fonctionné. VS Pro 15.7.5
Licht
24

Cela peut être réalisé en créant votre propre règle de dénomination Roslyn Code Analyzer. Ajoutez un .editorconfigdans votre solution pour spécifier des conventions de dénomination personnalisées.

En savoir plus sur eux ici: https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference

Pour obtenir l'effet souhaité de la question, ce qui suit fonctionnera:

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

Résultat:

entrez la description de l'image ici

kspearrin
la source
Cela me semble être le long chemin pour accomplir cette tâche. Veuillez consulter la réponse de @Maciek.
Eric
C'était le seul moyen de revenir lorsque j'ai répondu à l'origine. On dirait qu'ils ont ajouté une interface utilisateur pour le moment.
kspearrin
1
Éditer .editorconfig est une solution bien plus agréable que de le faire via l'interface utilisateur.
gliljas
@Eric C'est l'inverse. Dire à chaque membre de votre équipe de configurer manuellement son VS d'une certaine manière est certainement beaucoup plus long, fastidieux et sujet aux erreurs que d'archiver un .editorconfigfichier dans Git et de savoir qu'à partir de ce moment, tout
Daniel Liuzzi