2017-09-02 4 views
1

ich eine Klasse, die so etwas wie dies beginnt:Kann nicht CA1502 unterdrücken

namespace Tools.Builders 
{ 
    internal abstract class Builder 
    { 
     [SuppressMessage("Microsoft.Maintainability", "CA1502")] 
     private static readonly Dictionary<string, Func<ILogger, Builder>> _builders = 
      new Dictionary<string, Func<ILogger, Builder>> 
     { 
      { "1", (x) => {return new BuilderType1(x);} }, 
      { "2", (x) => {return new BuilderType2(x);} }, 
      { "3", (x) => {return new BuilderType3(x);} }, 
      { "4", (x) => {return new BuilderType4(x);} }, 
      { "5", (x) => {return new BuilderType5(x);} }, 
      { "6", (x) => {return new BuilderType6(x);} }, 
      { "7", (x) => {return new BuilderType7(x);} }, 
      { "8", (x) => {return new BuilderType8(x);} }, 
      { "9", (x) => {return new BuilderType9(x);} }, 
     }; 
     protected ILogger _logger; 
     protected Builder(ILogger logger) 
     { 
      _logger = logger; 
     } 
     //... 

Dieses eine CA1502 Warnung der Form verursacht „Builder.Builder() eine zyklomatische Komplexität von ...“ (das ist ein bekanntes Problem mit dieser Art von Initialisierer). Mein Problem ist jedoch, dass ich die Warnung nicht unterdrücken kann. Ich habe versucht, das SuppressMessageAttribute an allen möglichen Stellen im Code zu platzieren, aber es wird einfach ignoriert. Irgendwelche Vorschläge irgendjemand?

+0

[Dokumente] (https://msdn.microsoft.com/en-us/library/system.diagnostics.codeanalysis.suppressmessageattribute.suppressmessageattribute (v = vs.110) .aspx): _ "Das Präprozessorsymbol" CODE_ANALYSIS "Damit dieses Attribut wirksam ist, muss es definiert werden. Das Fehlen des Präprozessorsymbols führt dazu, dass das Attribut nicht angewendet wird." _ – CodeCaster

+0

Nun, ich habe es versucht, aber es machte keinen Unterschied. Danke trotzdem. – Dave

+0

Siehe [Pragma funktioniert nicht für Warnung CA1502] (https://social.msdn.microsoft.com/Forums/en-US/872d9c97-02b7-4409-9df7-6202ea0820dc/pragma-not-working-for-warning-ca1502 ? Forum = vstscode) – buffjape

Antwort

1

konnte ich diese Nachricht zu unterdrücken, indem ein Assembly-Level-Attribut, das den Konstruktor als Ziel angibt:

Dieses Attribut kann in einer beliebigen Codedatei in der Assembly platziert werden.

Für zukünftige Referenz, generierte ich dieses Attribut, indem ich mit der rechten Maustaste auf die CA-Warnung im Fenster Fehlerliste (oder das Fenster Codeanalyse in VS2013 und früher) und Unterdrücken -> In Suppression-Datei.

+0

Das ist ein netter Trick. Kopieren Sie das Attribut aus GlobalSuppressions.cs, das dann entfernt werden kann - viel aufgeräumter, um es in der Quelle zu haben, auf die es zutrifft. Das hat mein Problem behoben, danke. (Übrigens meinten Sie das Code-Analyse-Fenster nicht das Error-List-Fenster) – Dave

+0

@Dave Beginnend mit VS2015 kombinierten sie diese Fenster - ich werde bearbeiten, um den Unterschied zu bemerken. –

-1

Anwenden das folgende Attribut auf die Methode in Frage für mich in VS 2017

arbeitete [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]

+0

Das habe ich schon probiert - μS muss es 2017 behoben haben (ich bin auf 2012) – Dave

Verwandte Themen