Kann eine bestimmte Gendarm-Fehlermeldung unterdrückt werden? Ich möchte dies im Quellcode mit einer Flagge oder etwas ähnliches tun.Wie man Gendarmdefekte unterdrückt?
Antwort
Wenn Sie den Console Runner verwenden, können Sie eine defekte Datei (out-of-source) verwenden, um Fehler in einer Methode, einem Typ oder einer Baugruppe zu unterdrücken.
Der neue Gendarme 2.8 hat grundlegende (lesen unvollständige und fehlerhafte) Unterstützung für das Attribut [SuppressMessage] (wie fxcop). Erwarten Sie, dass diese Funktion ordnungsgemäß funktioniert, sobald 2.10 veröffentlicht wurde.
Soweit ich sehen kann, gibt es keine Möglichkeit zu aktivieren [SuppressMessage] in Gendarme (bei 2,8). Ich habe mir die neueste Quelle von GitHub geschnappt, weil sie nicht wie beschrieben funktionierte.
Die SupressMessageEngine ist im Code enthalten und es werden Tests durchgeführt, die eine manuelle Außerkraftsetzung von Runner.Engines.Subscribe durchführen. Aber die [EngineDependency (typeof (SuppressMessageEngine))] wird nicht auf alle kompilierten Regeln angewendet, so wie sie abonniert wird, wenn Gendarme tatsächlich ausgeführt wird.
Ich schaute auch auf die Quelle, um einen Weg zu finden, immer eine bestimmte Engine über Config abonnieren - aber es gibt keine.
Ich könnte falsch liegen, aber es sieht aus wie ein Versehen, dass sie vergessen haben, zurückzugehen und die entsprechenden EngineDependency-Attribute anzuwenden.
Der einzige "Workaround", den ich mir vorstellen kann, ist eine benutzerdefinierte Regel zu schreiben, die, wenn sie aufgerufen wird, ein Abonnement SuppressMessageEngine hinzufügt und nichts anderes tut. Hacky ja, aber das sollte arbeiten basierend auf was ich in ihrem Code gesehen habe.
FYI - Just dies implementiert. Sie müssen Ihre eigene benutzerdefinierte Regel, Import Mono.Cecil und Gendarme.Framework und Ziel .NET Framework 3,5
using Gendarme.Framework;
using Gendarme.Framework.Engines;
namespace MyRules
{
[Problem("Gendarme devs forgot to attribute rules with SuppressMessageEngine")]
[Solution("Include this rule")]
[EngineDependency(typeof(SuppressMessageEngine))]
public class AddSuppressMessageSupportRule : Rule {}
}
Leider erstellen, diese ziehen nicht in dem FxCopCompatibility Attributen, die sind dort (dh ein SupressMessage für eine FxCop-Regel, die mit einer Gendarm-Regel übereinstimmt, unterdrückt auch die Gendarm-Regel), aber zumindest können Sie die Gendarmen-Namen zum Unterdrücken verwenden.
Wie bereits erwähnt, unterstützt Version 2.10 das [SuppressMessage] -Attribut.
Zum Beispiel der AvoidNonAlphanumericIdentifierRule Regel zu unterdrücken, dies tun:
[SuppressMessage("Gendarme.Rules.Naming", "AvoidNonAlphanumericIdentifierRule")]
protected void Application_Start()
{
...
}
Beachten Sie, dass Sie den Namen der Assembly angeben müssen, wo die Regel lebt ... in diesem Fall lebt AvoidNonAlphanumericIdentifierRule in Gendarme. Rules.Naming.dll. Die vollständige Liste der Regeln und ihrer Assemblynamen lautet here.
- 1. Wie unterdrückt man Echos im Makefile?
- 2. Wie unterdrückt man die Konsolenausgabe in Python?
- 3. Wie unterdrückt man GCC-Warnungen von Bibliothekskopfzeilen?
- 4. Wie unterdrückt man die Ausgabe in RStudio?
- 5. Wie unterdrückt man die Korrelationstabelle in LME?
- 6. Wie man Warnungen in vim-Latex unterdrückt?
- 7. Wie unterdrückt man ein Meldungsfeld beim Komponententest?
- 8. unterdrückt NullPointerException in Mockito?
- 9. Wie unterdrückt man "Kann durch Foreach Call ersetzt werden" Warnung
- 10. Wie unterdrückt man den Wagenrücklauf in Python 2?
- 11. Wie unterdrückt man eine Compiler-Warnung in C# ohne #pragma?
- 12. Wie unterdrückt man "Makro neu definiert" Warnung in Objective-C
- 13. Wie unterdrückt man den von imagejpeg erzeugten JPEG-Kommentar?
- 14. Wie unterdrückt man einen Unterbericht in Crystal Reports Version 10.0?
- 15. Wie unterdrückt man das MouseMove-Ereignis im Einzelfall?
- 16. Wie unterdrückt man die Warnung für "drop_with_repr_extern" mit feiner Granularität?
- 17. Wie unterdrückt man Code-Analyse auf generierten Code?
- 18. C - Wie unterdrückt man die Ausgabe einer Unterfunktion?
- 19. Wie werden Fehler durch '@' unterdrückt?
- 20. Python unterdrückt Shell-Ausgabe
- 21. Warum unterdrückt ReadDirectoryChangesW Ereignisse?
- 22. LaTeX unterdrückt Seitenumbruch
- 23. Wie kann der Universumsdateipfad unterdrückt werden?
- 24. Wie kann eine Lesebestätigung unterdrückt werden?
- 25. Wie wird die ausführliche Tensorflow-Protokollierung unterdrückt?
- 26. Gurkenfehler unterdrückt (nicht vollständig angezeigt)
- 27. JavaScript unterdrückt einen bestimmten Fehler
- 28. Wie können Warnmeldungen beim Laden einer Bibliothek unterdrückt werden?
- 29. Split String mit allen Null-Felder unterdrückt
- 30. findAssocs() von tm-Paketen unterdrückt Verknüpfungen
Es sollte beachtet werden, dass die Baugruppe mit dem 'CODE_ANALYSIS' Symbol [für diese arbeiten] definiert kompiliert werden müssen (http://www.mono-project.com/Gendarme.FAQ#Why_are_defects_decorated_using_.5BSuppressMessage.5D_attributes_still_showing_in_my_reports_.3F). –
Auch die neuesten Versionen fügen FxCop-Kompatibilität hinzu. Wenn Sie also bereits eine SuppressMessage von FxCop haben und eine entsprechende Regel in Gendarme haben, wird die Nachricht unterdrückt. –