2009-09-03 8 views
5

Ich benutze StyleCop- und FxCop-Tools, um meinen Code zu verbessern, aber ich kam an einen Ort, an dem es zwei Regeln gibt, eine in StyleCop und eine in FxCop, die einander ausschließen. Wenn ich meinen Code an die Regel von StyleCop anpasse, schlägt die FxCop-Validierung fehl und umgekehrt.StyleCop- und FxCop-Regeln schließen sich gegenseitig aus

Die erste Regel ist SA1200 von StyleCop, die besagt, dass alle using-Direktiven innerhalb des Namespace platziert werden müssen.

Alle verwendeten Direktiven müssen innerhalb des Namespaces platziert werden.

So habe ich so etwas wie dieses

namespace MyNamespace 
{ 
    using System; 

    ... 
} 

getan Es ist für StyleCop ok war, nicht mehr Warnungen. Jetzt führe ich FxCop Validierung und es sagt mir, dass CA1014 verletzt wird:

Markieren Sie "MyApp.dll" mit CLSCompliant (True), weil es extern sichtbare Typen exponiert.

dies beheben ich etwas tun sollte:

[ClsCompliant(true)] 
namespace MyNamespace 
{ 
    ... 
} 

aber jetzt kann ich mein Projekt nicht bauen, weil ClsCompliant Attribut nicht erkannt wird (weil es von System Namespace ist, die ich in der MyNamespace enthalten) . Also, wenn ich using System; Richtlinie außerhalb der MyNamespace Erklärung verschieben. Dies wird meinen Code kompilieren lassen, aber wieder wird es die Regel von StyleCop brechen.

Gibt es eine Möglichkeit, mit diesem Problem umzugehen, außer eine der Regeln in StyleCop oder FxCop zu deaktivieren? Und wenn das nicht möglich ist, welche der Regeln sollte ich deaktivieren? Was ist weniger wichtig?

Antwort

15

Verwenden Sie vollständige Attributname:

[System.CLSCompliant(true)] 
namespace MyNamespace 
{ 
    ... 
} 

BTW: Wenn Sie Ihre gesamte Baugruppe als CLSCompliant markieren möchten, setzen

[assembly: System.CLSCompliant(true)] 

in Immobilien/AssemblyInfo.cs

Datei
+4

Ich denke, die Assembly sollte markiert werden CLSCompliant wie maciejkow wies darauf hin, anstatt die Namespace-konform zu markieren. –

3

Mein Vorschlag Um das "All using Directions muss innerhalb des Namespace platziert werden." Regel in StyleCop. Es ist unpraktisch, sich daran zu halten, insbesondere, da die meisten Codegeneratoren (selbst VS-eigene) dieser Praxis nicht folgen.

+0

Ich denke, es ist besser, StyleCop so einzustellen, dass generierte Dateien ignoriert werden. – RaYell

+2

Ja, wenn sie mit dem entsprechenden Attribut gekennzeichnet sind. Leider markieren einige der Codegeneratoren den generierten Code nicht. –