Meziantou.Analyzer
2.0.183
Ein Roslyn -Analysator, um einige gute Praktiken in C# in Bezug auf Design, Nutzung, Sicherheit, Leistung und Stil durchzusetzen.
Installieren Sie das Nuget -Paket https://www.nuget.org/packages/meziantou.analyzer/
Wenn Sie bereits andere Analysatoren verwenden, können Sie überprüfen, welche Regeln mit bekannten Analysatoren dupliziert werden
| Ausweis | Kategorie | Beschreibung | Schwere | Ist aktiviert | CODE Fix |
|---|---|---|---|---|---|
| MA0001 | Verwendung | StringComparison fehlt | ✔️ | ✔️ | |
| MA0002 | Verwendung | IequalityComparer <string> oder icomparer <string> fehlt | ✔️ | ✔️ | |
| MA0003 | Stil | Fügen Sie den Parameternamen hinzu, um die Lesbarkeit zu verbessern | ✔️ | ✔️ | |
| MA0004 | Verwendung | Verwenden Sie Task.ConfigureAwait | ✔️ | ✔️ | |
| MA0005 | Leistung | Verwenden Sie Array.Empty <T> () | ✔️ | ✔️ | |
| MA0006 | Verwendung | Verwenden Sie String.equals anstelle des Gleichstellungsoperators | ✔️ | ✔️ | |
| MA0007 | Stil | Fügen Sie nach dem letzten Wert ein Komma hinzu | ✔️ | ✔️ | |
| MA0008 | Leistung | StructLayoutAttribute hinzufügen | ✔️ | ✔️ | |
| MA0009 | Sicherheit | Fügen Sie eine REGEX -Bewertung Timeout hinzu | ✔️ | ||
| MA0010 | Design | Markieren Sie Attribute mit AttributeuseageTtribute | ✔️ | ✔️ | |
| MA0011 | Verwendung | IformatProvider fehlt | ✔️ | ||
| MA0012 | Design | Heben Sie den reservierten Ausnahmetyp nicht an | ✔️ | ||
| MA0013 | Design | Typen sollten das System nicht erweitern. AnwendungException | ✔️ | ||
| MA0014 | Design | Erhöhen Sie nicht das System.ApplicationException -Typ | ✔️ | ||
| MA0015 | Verwendung | Geben Sie den Parameternamen in ArgumentException an | ✔️ | ||
| MA0016 | Design | Verwenden Sie die Sammlungsabstraktion anstelle der Implementierung vor | ✔️ | ||
| MA0017 | Design | Abstrakte Typen sollten keine öffentlichen oder internen Konstruktoren haben | ✔️ | ✔️ | |
| MA0018 | Design | Deklarieren Sie keine statischen Mitglieder für generische Typen (veraltet; verwenden Sie stattdessen CA1000). | ✔️ | ||
| MA0019 | Verwendung | Verwenden Sie EventArgs.Empty | ✔️ | ✔️ | |
| MA0020 | Leistung | Verwenden Sie direkte Methoden anstelle von LINQ -Methoden | ✔️ | ✔️ | |
| MA0021 | Verwendung | Verwenden Sie StringComparer.GethashCode anstelle von string.gethashCode | ✔️ | ✔️ | |
| MA0022 | Design | Return task.fromResult anstatt NULL zurückzugeben | ✔️ | ✔️ | |
| MA0023 | Leistung | Fügen Sie regexoptions.explicitCapture hinzu | ✔️ | ||
| MA0024 | Verwendung | Verwenden Sie nach Möglichkeit einen expliziten StringComparer | ✔️ | ✔️ | |
| MA0025 | Design | Implementieren Sie die Funktionalität, anstatt notimplementedException zu werfen | ✔️ | ||
| MA0026 | Design | Fix TODO -Kommentar | ✔️ | ||
| MA0027 | Verwendung | Bevorzugen eine Ausnahme implizit | ✔️ | ✔️ | |
| MA0028 | Leistung | Optimieren Sie die Verwendung von StringBuilder | ✔️ | ✔️ | |
| MA0029 | Leistung | Kombinieren Sie Linq -Methoden | ✔️ | ✔️ | |
| MA0030 | Leistung | Nutzlosen Auftragsanruf entfernen | ✔️ | ✔️ | |
| MA0031 | Leistung | Optimieren Sie aufzählbare. Count () Verwendung | ✔️ | ✔️ | |
| MA0032 | Verwendung | Verwenden Sie eine Überlastung mit einem stornierenden Argument | |||
| MA0033 | Design | Tags -Instanzfelder mit ThreadstaticAttribute nicht taggen | ✔️ | ||
| MA0035 | Verwendung | Verwenden Sie keine gefährlichen Threading -Methoden | ✔️ | ||
| MA0036 | Design | Klasse statisch machen | ✔️ | ✔️ | |
| MA0037 | Verwendung | Leere Anweisung entfernen | ✔️ | ✔️ | |
| MA0038 | Design | Machen Sie die Methode statisch (veraltet, verwenden Sie stattdessen CA1822) | ✔️ | ✔️ | |
| MA0039 | Sicherheit | Schreiben Sie nicht Ihre eigene Zertifikat -Validierungsmethode | ✔️ | ||
| MA0040 | Verwendung | Leiten Sie den Parameter für Stornierungen an Methoden weiter, die einen annehmen | ✔️ | ✔️ | |
| MA0041 | Design | Machen Sie Eigentum statisch (veraltet, verwenden Sie stattdessen CA1822) | ✔️ | ✔️ | |
| MA0042 | Design | Verwenden Sie keine Blockierungsanrufe in einer asynchronen Methode | ✔️ | ✔️ | |
| MA0043 | Verwendung | Verwenden Sie den Namen des Operators in ArgumentException | ✔️ | ✔️ | |
| MA0044 | Leistung | Entfernen Sie den nutzlosen ToString -Anruf | ✔️ | ✔️ | |
| MA0045 | Design | Verwenden Sie keine Blockierungsaufrufe in einer Synchronisierungsmethode (müssen die Aufrufmethode asynchronisiert machen). | ✔️ | ||
| MA0046 | Design | Verwenden Sie EventHandler <t>, um Ereignisse zu deklarieren | ✔️ | ||
| MA0047 | Design | Deklarieren Sie Typen in Namespaces | ✔️ | ||
| MA0048 | Design | Dateiname muss mit dem Typennamen übereinstimmen | ✔️ | ||
| MA0049 | Design | Geben Sie den Namen nicht überein, der den Namespace enthält | ✔️ | ||
| MA0050 | Design | Validieren Sie Argumente in Iteratormethoden korrekt | ✔️ | ✔️ | |
| MA0051 | Design | Methode ist zu lang | ✔️ | ||
| MA0052 | Leistung | Ersetzen Sie die konstante Aufzählung. | ✔️ | ✔️ | |
| MA0053 | Design | Klasse versiegelt | ✔️ | ✔️ | |
| MA0054 | Design | Betten Sie die gefangene Ausnahme als Innerexception ein | ✔️ | ||
| MA0055 | Design | Verwenden Sie keinen Finalizer | ✔️ | ||
| MA0056 | Design | Rufen Sie keine überschreibbaren Mitglieder im Konstruktor an | ✔️ | ||
| MA0057 | Benennung | Der Klassenname sollte mit 'Attribut' enden | ✔️ | ||
| MA0058 | Benennung | Der Klassenname sollte mit "Ausnahme" enden | ✔️ | ||
| MA0059 | Benennung | Der Klassenname sollte mit 'EventArgs' enden | ✔️ | ||
| MA0060 | Design | Der von stream.read/stream.readasync zurückgegebene Wert wird nicht verwendet | ✔️ | ||
| MA0061 | Design | Überschreibungen für Methoden sollten keine Standardwerte ändern | ✔️ | ✔️ | |
| MA0062 | Design | Nicht-Flaggen-Enums sollten nicht mit "FlagsAttribute" markiert werden. | ✔️ | ||
| MA0063 | Leistung | Verwenden Sie wo vor Orderby | ✔️ | ||
| MA0064 | Design | Vermeiden Sie es, öffentlich zugängliche Instanzen zu sperren | ✔️ | ||
| MA0065 | Leistung | Standard Valuetype.equals oder HashCode wird zur Strukturgleichheit verwendet | ✔️ | ||
| MA0066 | Leistung | Hash -Tabelle unfreundlicher Typ wird in einer Hash -Tabelle verwendet | ✔️ | ||
| MA0067 | Design | Verwenden Sie Guid.Empty | ✔️ | ✔️ | |
| MA0068 | Design | Ungültiger Parametername für das Nullable -Attribut | ✔️ | ||
| MA0069 | Design | Nicht konstante statische Felder sollten nicht sichtbar sein | ✔️ | ||
| MA0070 | Design | Veraltete Attribute sollten Erklärungen enthalten | ✔️ | ||
| MA0071 | Stil | Vermeiden Sie sonst eine redundante Verwendung | ✔️ | ✔️ | |
| MA0072 | Design | Nicht aus einem endgültigen Block werfen | ✔️ | ||
| MA0073 | Stil | Vermeiden Sie den Vergleich mit BOOL -Konstante | ✔️ | ✔️ | |
| MA0074 | Verwendung | Vermeiden Sie implizite kulturempfindliche Methoden | ✔️ | ✔️ | |
| MA0075 | Design | Verwenden Sie nicht implizites kulturempfindliches Zostring | ✔️ | ||
| MA0076 | Design | Verwenden Sie nicht implizites kulturempfindliches Zostring in interpolierten Saiten | ✔️ | ||
| MA0077 | Design | Eine Klasse, die gleich (t) bietet, sollte iequatable <t> implementieren | ✔️ | ✔️ | |
| MA0078 | Leistung | Verwenden Sie "Cast" anstelle von "ausgewählten", um gegossen zu werden | ✔️ | ✔️ | |
| MA0079 | Verwendung | Leiten Sie die Stornierung mit .withcancellation () weiter | ✔️ | ✔️ | |
| MA0080 | Verwendung | Verwenden Sie einen Stornierungs -Token mit .withcancellation () | |||
| MA0081 | Design | Überschreibungen für Methoden sollten das Schlüsselwort Params nicht weglassen | ✔️ | ✔️ | |
| MA0082 | Design | NAN sollte nicht in Vergleiche verwendet werden | ✔️ | ||
| MA0083 | Design | Konstruktorargument -Parameter sollten in Konstruktoren vorhanden sein | ✔️ | ||
| MA0084 | Design | Lokale Variablen sollten andere Symbole nicht verbergen | ✔️ | ||
| MA0085 | Verwendung | Anonyme Delegierte sollten nicht verwendet werden, um sich von Ereignissen abzumelden | ✔️ | ||
| MA0086 | Design | Wirf nicht von einem Finalizer ab | ✔️ | ||
| MA0087 | Design | Parameter mit [defaultParameterValue] -attributen sollten ebenfalls [optional] gekennzeichnet sein | ✔️ | ||
| MA0088 | Design | Verwenden Sie [defaultParameterervalue] anstelle von [defaultValue] | ✔️ | ||
| MA0089 | Leistung | Optimieren Sie die String -Methode -Verwendung | ✔️ | ✔️ | |
| MA0090 | Design | Leer sonst entfernen/schließlich blockieren | ✔️ | ||
| MA0091 | Verwendung | Der Absender sollte "dies" sein, zum Beispiel Ereignisse | ✔️ | ✔️ | |
| MA0092 | Verwendung | Der Absender sollte für statische Ereignisse "null" sein | ✔️ | ||
| MA0093 | Verwendung | EventArgs sollten nicht null sein | ✔️ | ✔️ | |
| MA0094 | Design | Eine Klasse, die Compareto (T) liefert | ✔️ | ||
| MA0095 | Design | Eine Klasse, die IEquatable <t> implementiert, sollte gleich (Objekt) überschreiben (Objekt) | ✔️ | ||
| MA0096 | Design | Eine Klasse, die Ikomen <T> implementiert, sollte auch iEquatable <t> implementieren | ✔️ | ||
| MA0097 | Design | Eine Klasse, die implementiert, dass ikparable <t> oder iktrennierbar die Vergleichsoperatoren überschreiben sollte | ✔️ | ||
| MA0098 | Leistung | Verwenden Sie den Indexer anstelle von LINQ -Methoden | ✔️ | ✔️ | |
| MA0099 | Verwendung | Verwenden Sie einen expliziten Enumswert anstelle von 0 | ✔️ | ||
| MA0100 | Verwendung | Warten Sie auf die Aufgabe, bevor Sie Ressourcen entsorgen | ✔️ | ||
| MA0101 | Verwendung | String enthält ein implizites Ende des Zeilenzeichens | ? | ✔️ | ✔️ |
| MA0102 | Design | Machen Sie Mitglied readonly | ✔️ | ✔️ | |
| MA0103 | Verwendung | Verwenden Sie SequenceEqual anstelle des Gleichstellungsoperators | ✔️ | ✔️ | |
| MA0104 | Design | Erstellen Sie keinen Typ mit einem Namen aus der BCL | |||
| MA0105 | Leistung | Verwenden Sie die Lambda -Parameter, anstatt einen Verschluss zu verwenden | ✔️ | ||
| MA0106 | Leistung | Vermeiden Sie den Verschluss, indem Sie eine Überladung mit dem Parameter "FactoryArgument" verwenden | ✔️ | ||
| MA0107 | Design | Verwenden Sie kein kulturempfindliches Objekt.tostring | |||
| MA0108 | Verwendung | Entfernen Sie den redundanten Argumentwert | ✔️ | ✔️ | |
| MA0109 | Design | Erwägen Sie eine Überladung mit einem Spannwechsel <T> oder Speicher <t> | |||
| MA0110 | Leistung | Verwenden Sie den Regex -Quellgenerator | ✔️ | ✔️ | |
| MA0111 | Leistung | Verwenden Sie String.create anstelle von FormAtableString | ✔️ | ✔️ | |
| MA0112 | Leistung | Verwenden Sie 'count> 0' anstelle von 'Any ()' '' | |||
| MA0113 | Design | Verwenden Sie datetime.unixepoch | ✔️ | ✔️ | |
| MA0114 | Design | Verwenden Sie datetimeOffset.unixepoch | ✔️ | ✔️ | |
| MA0115 | Verwendung | Unbekannter Komponentenparameter | ✔️ | ||
| MA0116 | Design | Parameter mit [SupplyParameterFromQuery] -attributen sollten ebenfalls als [Parameter] gekennzeichnet werden | ✔️ | ✔️ | |
| MA0117 | Design | Parameter mit [EditorRequired] -attributen sollten ebenfalls als [Parameter] gekennzeichnet sein | ✔️ | ✔️ | |
| MA0118 | Design | [Jsinvokable] Methoden müssen öffentlich sein | ✔️ | ||
| MA0119 | Design | JsRuntime darf nicht in überinitialisierten oder aufinitialisiertenasync verwendet werden | ✔️ | ||
| MA0120 | Leistung | Verwendung Invokevoidasync, wenn der zurückgegebene Wert nicht verwendet wird | ✔️ | ✔️ | |
| MA0121 | Design | Überschreiben Sie den Parameterwert nicht | |||
| MA0122 | Design | Parameter mit [SupplyParameterfromQuery] -attributen sind nur in routbaren Komponenten (@Page) gültig | ✔️ | ||
| MA0123 | Design | Die Sequenzzahl muss eine Konstante sein | ✔️ | ||
| MA0124 | Design | Der Protokollparametertyp ist nicht gültig | ✔️ | ||
| MA0125 | Design | Die Liste der Protokollparametertypen enthält einen ungültigen Typ | ✔️ | ||
| MA0126 | Design | Die Liste der Protokollparametertypen enthält ein Duplikat | ✔️ | ||
| MA0127 | Verwendung | Verwenden Sie String.equals anstelle von IS -Muster | |||
| MA0128 | Verwendung | Verwendung 'ist' Operator anstelle von SequenzEqual | ✔️ | ✔️ | |
| MA0129 | Verwendung | Warten Sie auf die Aufgabe bei der Verwendung der Anweisung | ✔️ | ||
| MA0130 | Verwendung | GetType () sollte nicht für Systeme.typ -Instanzen verwendet werden | ✔️ | ||
| MA0131 | Verwendung | ArgumentNulLexception.Throwifnull sollte nicht mit nicht nullbaren Typen verwendet werden | ✔️ | ||
| MA0132 | Design | Konvertieren Sie nicht implizit in datetimeOffset | ✔️ | ||
| MA0133 | Design | Verwenden Sie DateTimeOffset, anstatt sich auf die implizite Konvertierung zu verlassen | ✔️ | ||
| MA0134 | Verwendung | Beobachten Sie das Ergebnis von asynchronen Anrufen | ✔️ | ||
| MA0135 | Design | Der Protokollparameter hat keinen konfigurierten Typ | |||
| MA0136 | Verwendung | Die rohe Zeichenfolge enthält ein implizites Ende des Linienzeichens | ? | ✔️ | |
| MA0137 | Design | Verwenden Sie 'asynchrisches' Suffix, wenn eine Methode einen wartbaren Typ zurückgibt | |||
| MA0138 | Design | Verwenden Sie nicht 'asynchronisiertes' Suffix, wenn eine Methode keinen wartbaren Typ zurückgibt | |||
| MA0139 | Design | Der Protokollparametertyp ist nicht gültig | ✔️ | ||
| MA0140 | Design | Beide, wenn und sonst der Zweig identische Code hat | ✔️ | ||
| MA0141 | Verwendung | Verwenden Sie Musteranpassungen anstelle von Ungleichheitsoperatoren für die Nullprüfung | ✔️ | ||
| MA0142 | Verwendung | Verwenden Sie Musteranpassungen anstelle von Gleichstellungsoperatoren für die Nullprüfung | ✔️ | ||
| MA0143 | Design | Primäre Konstruktorparameter sollten readonly sein | ✔️ | ||
| MA0144 | Leistung | Verwenden Sie System.operatingsystem, um das aktuelle Betriebssystem zu überprüfen | ✔️ | ||
| MA0145 | Verwendung | Die Signatur für die [unsichere Methode] ist nicht gültig | ✔️ | ||
| MA0146 | Verwendung | Der Name muss explizit auf lokalen Funktionen festgelegt werden | ✔️ | ||
| MA0147 | Verwendung | Vermeiden | ✔️ | ||
| MA0148 | Verwendung | Verwenden Sie Musteranpassungen anstelle von Gleichstellungsoperatoren für diskreten Wert | ✔️ | ||
| MA0149 | Verwendung | Verwenden Sie Musteranpassungen anstelle von Ungleichheitsoperatoren für diskreten Wert | ✔️ | ||
| MA0150 | Design | Rufen Sie das Standardobjekt nicht auf. TOSTRING explizit | ✔️ | ||
| MA0151 | Verwendung | DebuggerDisplay muss gültige Mitglieder enthalten | ✔️ | ||
| MA0152 | Leistung | Verwenden Sie Auswackel, anstatt zweimal Warten zu verwenden | ✔️ | ||
| MA0153 | Design | Nicht mit DataClassificationAttribute dekoriert mit DataClassificationAttribute protokollieren | ✔️ | ||
| MA0154 | Design | Verwenden Sie Langword im XML -Kommentar | ✔️ | ✔️ | |
| MA0155 | Design | Verwenden Sie keine asynchrischen Void -Methoden | |||
| MA0156 | Design | Verwenden Sie 'asynchrisches' Suffix, wenn eine Methode iAsyncenumerable <t> zurückgibt | |||
| MA0157 | Design | Verwenden Sie nicht 'asynchronisiertes' Suffix, wenn eine Methode iaSyncenumerable <T> nicht zurückgibt | |||
| MA0158 | Leistung | Verwenden Sie System.Threading.lock | ✔️ | ||
| MA0159 | Leistung | Verwenden Sie 'Order' anstelle von 'orderBy' | ✔️ | ✔️ | |
| MA0160 | Leistung | Verwendung enthält Key anstelle von TrygetValue | ✔️ | ||
| MA0161 | Verwendung | USeshellexecute muss explizit eingestellt sein | |||
| MA0162 | Verwendung | Verwenden Sie den Prozess. Starten Sie die Überlastung mit ProcessStartInfo | |||
| MA0163 | Verwendung | Useshellexecute muss beim Umleiten der Standardeingabe oder der Ausgabe falsch sein | ✔️ | ||
| MA0164 | Stil | Verwenden Sie Klammern, um das Muster nicht klarer zu machen | ✔️ | ✔️ | |
| MA0165 | Verwendung | Interpolierte Zeichenfolge machen | ? | ✔️ | ✔️ |
| Ausweis | Unterdrückte Regel | Rechtfertigung |
|---|---|---|
MAS0001 | CA1822 | Unterdrücken Sie CA1822 auf Methoden, die mit Benchmarkdotnet -Attributen verziert sind. |
MAS0002 | CA1822 | Unterdrückung CA1822 auf Methoden, die mit einem System dekoriert sind. |
MAS0003 | Ide0058 | Unterdrückung ide0058 an bekannten Typen |