2009-09-03 11 views
5

Uso gli strumenti StyleCop e FxCop per migliorare il mio codice, ma sono giunto a un punto in cui ci sono due regole, una in StyleCop e una in FxCop che si escludono a vicenda. Se correggo il mio codice in modo che corrisponda alla regola di StyleCop, la convalida di FxCop fallisce e viceversa.Le regole StyleCop e FxCop si escludono a vicenda

La prima regola è SA1200 di StyleCop che dice che tutte le direttive devono essere inserite all'interno dello spazio dei nomi.

Tutte le direttive di utilizzo devono essere inserite all'interno dello spazio dei nomi.

così ho fatto qualcosa di simile

namespace MyNamespace 
{ 
    using System; 

    ... 
} 

Non era male per StyleCop, senza più avvisi. Ora eseguo la convalida FxCop e mi dice che CA1014 è stato violato:

Contrassegnare "MyApp.dll" con CLSCompliant (true) perché espone tipi visibili esternamente.

Per risolvere questo devo fare qualcosa di simile:

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

ma ora non posso costruire il mio progetto, perché l'attributo ClsCompliant non è riconosciuto (perché è da System namespace che includo all'interno del MyNamespace) . Quindi, se sposto la direttiva using System; al di fuori della dichiarazione MyNamespace. Questo renderà il mio codice compilato, ma ancora una volta infrangerà la regola da StyleCop.

C'è un modo per risolvere questo problema tranne che per disabilitare una delle regole in StyleCop o FxCop? E se questo non è possibile quale delle regole dovrei disabilitare? Quale è meno importante?

risposta

15

Usa nome di attributo completo:

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

BTW: se si desidera contrassegnare tutta la vostra assemblea come CLSCompliant, mette

[assembly: System.CLSCompliant(true)] 

in Proprietà/AssemblyInfo.cs file di

+4

Penso che l'assembly dovrebbe essere contrassegnato CLSCompliant come indicato da maciejkow invece di contrassegnare lo spazio dei nomi conforme. –

3

Il mio suggerimento è disattivare "Tutte le direttive di utilizzo devono essere inserite all'interno dello spazio dei nomi". regola in StyleCop. Non è pratico aderirvi, soprattutto perché la maggior parte dei generatori di codice (anche quelli di VS) non seguono questa pratica.

+0

Penso che sia meglio impostare StyleCop in modo che ignori i file generati. – RaYell

+2

Sì, se sono contrassegnati con l'attributo appropriato. Sfortunatamente alcuni generatori di codice non contrassegnano il codice generato. –

Problemi correlati