Domanda

Sto utilizzando strumenti StyleCop e FxCop per migliorare il mio codice, ma mi è venuto in un posto dove ci sono due regole, una in StyleCop e uno in FxCop che escludono l'un l'altro. Se posso risolvere il mio codice in modo che corrisponda alla regola da StyleCop poi convalida FxCop non riesce e viceversa.

Per prima regola è SA1200 da StyleCop che dice che tutte le direttive che utilizzano devono essere posizionati all'interno dello spazio dei nomi.

  

Tutte le direttive che utilizzano devono essere posizionati all'interno dello spazio dei nomi.

Così ho fatto qualcosa di simile

namespace MyNamespace
{
    using System;

    ...
}

E 'stato ok per StyleCop, senza più avvisi. Ora corro convalida FxCop e mi dice che CA1014 è violata:

  

Mark 'MyApp.dll' con CLSCompliant (vero) perché espone i 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 namespace System che includo all'interno del MyNamespace). Quindi, se mi muovo direttiva using System; al di fuori della dichiarazione MyNamespace. Questo renderà il mio codice di compilazione, ma ancora una volta si romperà la regola da StyleCop.

C'è un modo per affrontare questo problema, tranne per disabilitare una delle regole in StyleCop o FxCop? E se questo non è possibile, che le regole dovrei disabilitare? Che è meno importante?

È stato utile?

Soluzione

Utilizzare il nome completo dell'attributo:

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

A proposito: se si desidera contrassegnare tutta la vostra assemblea come CLSCompliant, mettere

[assembly: System.CLSCompliant(true)]

nel file / AssemblyInfo.cs Proprietà

Altri suggerimenti

Il mio suggerimento è quello di spegnere le "Tutte le direttive che utilizzano devono essere posizionati all'interno dello spazio dei nomi." governare in StyleCop. E 'poco pratico di aderire ad essa, soprattutto perché la maggior parte dei generatori di codice (anche VS quelli propri) non seguono questa pratica.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top