Wie passe ich die Verknüpfung zur privaten Feldgenerierung von Visual Studio für Konstruktoren an?

120

VS 2017 (und möglicherweise ältere Versionen) bietet mir diese praktische kleine Konstruktorverknüpfung, um ein private readonlyFeld zu generieren und es zuzuweisen.

Bildschirmfoto:

Geben Sie hier die Bildbeschreibung ein

Dies führt dazu, dass ein privates Mitglied namens generiert wird userServiceund es dann zugewiesen wird mit:

this.userService = userService;

Dies widerspricht dem von mir verwendeten Codestil, bei dem alle privaten Mitglieder mit einem Präfix benannt werden, _das zu einer Zuweisung führt, die wie folgt aussehen sollte:

_userService = userService;

Wie kann ich dafür sorgen, dass VS diese Codestilregel mit seinen Verknüpfungen zur Codegenerierung befolgt?

kspearrin
quelle
Dies hat nichts mit Snippets zu tun. Diese Funktion wird vom Code-Analysedienst bereitgestellt. Verfügbar seit Roslyn hinzugefügt wurde. Ein führender Unterstrich ist ein Verstoß gegen die .NET Framework-Programmierrichtlinie. Auf keinen Fall werden Sie einen Microsoft-Programmierer dazu überreden, dies zu ändern. Es ist ein Stil, der von Resharper vorangetrieben wird, den sie nicht mögen, this.weil der Programmierer ihn nicht kauft, sondern ihn in Betracht zieht.
Hans Passant
18
@HansPassant Jeder moderne Code, den ich von den Microsoft-Teams gesehen habe, folgt dieser _camelCaseKonvention für private Mitglieder. Siehe die Richtlinien für den CoreFX C # -Codierungsstil , den ASP.NET Core-Codierungsstil und sogar den Rosyln-Code selbst ... ??
Kspearrin
5
@HansPassant Gute Nachrichten ... jemand hat einen Microsoft-Programmierer erfolgreich überredet, dies ändern zu können. Siehe die Antwort unten.
Kspearrin
Irgendeine Idee, wie man das in Visual Studio für Macs macht?
Jason V

Antworten:

229

Dies kann auch direkt in Visual Studio erreicht werden. Geh einfach zu Tools -> Options -> Text Editor -> C# -> Code Style -> Naming.

  1. Zunächst müssen Sie einen neuen Namensstil definieren, indem Sie auf die Schaltfläche "Namensstile verwalten" klicken:

VS2017 Dialogfeld "Namensstil"

  1. Klicken Sie dann auf das + -Zeichen, um eine neue Regel für "Privates oder internes Feld" zu definieren, die Ihren neuen Namensstil verwendet:

Dialogfeld "VS2017-Optionen"

  1. Starten Sie Visual Studio neu

  2. Wenn Sie danach das Refactoring "Feld erstellen und initialisieren" anwenden, wird es mit einem führenden Unterstrich benannt.

Maciek
quelle
Ich bin in Visual Studio 15.8.8 und dies war die einzige Antwort hier, die für mich funktioniert hat.
Jonathan Taylor
25
Zu Ihrer Information: Möglicherweise müssen Sie VS danach neu starten.
Jeff
9
Funktioniert gut in VS 2019.
Matt Stannett
3
Nicht alle Helden tragen Umhänge. Tolle Erklärung. Funktioniert super! Vielen Dank.
Datum
1
In VS 2019 Version 16.5.4
Douglas HM ist
32

Die .editorconfig-Einstellungen sind kspearrins Antwort hat bei mir nicht funktioniert. Ich musste diese verwenden (für 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 = _

Ich habe diese von hier erhalten: https://github.com/dotnet/roslyn/issues/22884#issuecomment-358776444

michael_hook
quelle
Seltsam. Ich verwende jetzt VS 2017 15.6 und meine ursprüngliche Antwort scheint dort immer noch zu funktionieren. Wer weiß ...
Kspearrin
Ich habe auf 15.6.3 aktualisiert und diese Version funktioniert immer noch für mich. Ich verwende die Community Edition, vielleicht nicht?
michael_hook
Ich kann auch nicht zur Arbeit kommen, ich verwende VS Pro 2017 Version 15.6.4
Eric Schneider
1
Darauf
Eric Schneider
Dieser hat bei mir funktioniert, als die akzeptierte Antwort nicht stimmte. VS Pro 15.7.5
Licht
24

Dies kann erreicht werden, indem Sie Ihre eigene Roslyn Code Analyzer-Namensregel erstellen. Fügen Sie .editorconfigIhrer Lösung ein hinzu, um benutzerdefinierte Namenskonventionen anzugeben.

Lesen Sie hier mehr darüber: https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference

Um den gewünschten Effekt aus der Frage zu erzielen, funktioniert Folgendes:

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

Ergebnis:

Geben Sie hier die Bildbeschreibung ein

kspearrin
quelle
Dies scheint mir der lange Weg zu sein, um diese Aufgabe zu erfüllen. Bitte lesen Sie die Antwort von @Maciek.
Eric
Dies war der einzige Weg zurück, als ich ursprünglich antwortete. Sieht so aus, als hätten sie jetzt eine Benutzeroberfläche hinzugefügt.
Kspearrin
1
Das Bearbeiten von .editorconfig ist eine viel schönere Lösung als das Bearbeiten über die Benutzeroberfläche.
Gliljas
@ Eric Es ist umgekehrt. Es ist definitiv viel länger, langwieriger und fehleranfälliger , jedem Mitglied Ihres Teams anzuweisen, seinen VS auf eine bestimmte Weise von Hand zu konfigurieren , als eine .editorconfigDatei in Git einzuchecken und zu wissen, dass von diesem Moment an alle Einstellungen automatisch angepasst werden, um zu folgen den Codierungsstil des Projekts.
Daniel Liuzzi