19

In einem Projekt, das ich arbeite auf FxCop zeigt mir viele (und ich meine mehr als 400) Fehler auf die InitializeComponent() -Methoden vom Windows Forms-Designer generiert. Die meisten dieser Fehler sind nur die Zuweisung der Eigenschaft Text von Labels.Code-Analyse-Regel in Quelle ausschließen

Ich möchte diese Methoden in der Quelle unterdrücken, also kopierte ich den von FxCop erzeugten Unterdrückungscode in AssemblyInfo.cs, aber es funktioniert nicht.

Dies ist das Attribut, das FxCop in die Zwischenablage kopiert hat.

[module: SuppressMessage("Microsoft.Globalization", 
    "CA1303:DoNotPassLiteralsAsLocalizedParameters", 
    Scope = "member", 
    Target = "WindowsClient.MainForm.InitializeComponent():System.Void", 
    MessageId = "System.Windows.Forms.Control.set_Text(System.String)")] 

Wer kennt das korrekte Attribut, um diese Nachrichten zu unterdrücken?

PS: Ich verwende Visual Studio 2005, C#, FxCop 1.36 Beta.

Antwort

18

Sie haben wahrscheinlich den richtigen Code, aber Sie müssen auch CODE_ANALYSIS als vorkompiliertes Symbol in den Projekteigenschaften hinzufügen. Ich denke, dass diese SuppressMessage-Attribute nur in den kompilierten Binärdateien verbleiben, wenn CODE_ANALYSIS definiert ist.

+2

Ich hatte eine Lösung mit mehreren Projekten. Die CODE_ANALYSIS muss für jedes Projekt hinzugefügt werden. – Diizzy

2

Modulebene-Unterdrückungsnachrichten müssen in die gleiche Datei eingefügt werden wie der Code, der den FxCop-Fehler vor der Namespace-Deklaration oder in assemblyinfo.cs auslöst. Darüber hinaus müssen Sie CODE_ANALYSIS als bedingte Compiler-Symbole definiert haben (Projekt> Eigenschaften> Erstellen). Sobald dies geschehen ist, führen Sie eine vollständige Neuerstellung des Projekts durch und wenn Sie das nächste Mal FxCop ausführen, sollte der Fehler auf die Registerkarte "Ausgeschlossen in der Quelle" verschoben werden.

Auch ein kleiner Tipp, aber wenn Sie mit vielen FxCop Ausschlüssen zu tun haben, könnte es nützlich sein, eine Region um sie herum zu wickeln, damit Sie sie aus dem Weg bekommen können.

4

In FxCop 1.36 gibt es tatsächlich eine Projektoption auf der Registerkarte "Rechtschreibung & Analyse", die die Analyse für jeden generierten Code unterdrückt.

Wenn Sie die Analyse nicht für den gesamten generierten Code deaktivieren möchten, müssen Sie sicherstellen, dass Sie der Liste der Symbole für bedingte Kompilierung (Projekteigenschaften, Registerkarte Erstellen) ein CODE_ANALYSIS-Symbol hinzufügen. Ohne dieses Symbol werden die SupressMessage-Attribute aus dem kompilierten Code entfernt, sodass FxCop sie nicht sehen kann.

Das andere Problem mit Ihrem SuppressMessage-Attribut besteht darin, dass Sie ein "Ziel" eines bestimmten Methodennamens (in diesem Fall WindowsClient.MainForm.InitializeComponent(): System.Void) auflisten und einen bestimmten "Bereich" auflisten. Sie können versuchen, diese zu entfernen; Andernfalls sollten Sie diese SuppressMessage jeder Instanz der Methode hinzufügen.

Sie sollten auch auf die RTM version von FxCop 1.36 aktualisieren, die Beta wird die neuere Version nicht automatisch erkennen.