StyleCop/FXCOP 10 - Come si sopprimono correttamente un messaggio solo a livello di spazio dei nomi?
-
29-10-2019 - |
Domanda
FXCOP 10 si lamenta di quanto segue:
using XYZ.Blah; //CA1709 - "XYZ"
using Xyz.Blah; //No complaint.
using XylophoneSuperDuperLongFullName.Blah; //I don't want to have a long full name for my company name.
Il problema è ... Voglio che il nome della mia azienda venga visualizzato in tutto il mondo perché Xyz è un'abbreviazione. La versione lunga del nome è troppo lunga per essere uno spazio dei nomi utile. Microsoft se ne va con questo tipo di cose perché il loro acronimo è solo 2 lettere.
using MS.Something; //No Complaint.
using Microsoft.SomethingElse; //No Complaint.
Quindi, stavo cercando di aggiungere un SuppressMessageAttribute
per sopprimere questo avvertimento. Ma non sono sicuro di come farlo correttamente solo a (o dove persino attaccarlo) in modo che influisca solo su questo istanza. Non voglio sopprimere nulla all'interno di quello spazio dei nomi perché voglio catturare altri errori che commetto. Ho guardato a MSDN e Google perquisito, ma non riesco a trovare nulla che mostri come colpire in modo specifico questa istanza. Il più vicino che ho trovato era Scope = "Spazio nomi" ma non ero sicuro se ciò significa che influisce sul nome dello spazio dei nomi effettivi o se influisce su tutto all'interno di quello spazio dei nomi.
Soluzione
MSDN - CA1709: gli identificatori devono essere cotti correttamente:
È sicuro sopprimere questo avvertimento se si dispone delle tue convenzioni di denominazione o se l'identificatore rappresenta un nome proprio, ad esempio il nome di un'azienda o una tecnologia.
Puoi anche aggiungere termini specifici, abbreviazioni e acronimi che a un dizionario personalizzato di analisi del codice. I termini specificati nel dizionario personalizzato non causano violazioni di questa regola. Per ulteriori informazioni, consultare come: personalizzare il dizionario dell'analisi del codice.
Detto questo, se ti senti giustificato a sopprimere il messaggio, non è affatto difficile. In FXCOP 10 Fare clic con il pulsante destro del mouse su qualsiasi messaggio che si desidera sopprimere e andare a copiare come> sopprimere il messaggio o copiare come> messaggio di sopprimere a livello di modulo.
Dovresti posizionare il SuppressMessageAttribute
s nelle posizioni appropriate. Gli attributi che sopprimono una singola posizione devono essere posizionati su quella posizione, ad esempio sopra un metodo, un campo, una proprietà o una classe.
Nel tuo istanza, non esiste una posizione specifica per posizionare l'attributo (per impostazione predefinita dovrebbe copiare come [module: SuppressMessage(...)]
. Questa è una buona indicazione che appartiene sia nella parte superiore di un file se si tratta di una soppressione a livello di modulo particolare a un file (ad esempio, a una risorsa specifica per un file). Oppure, più probabile, appartiene a un file GlobalSuppressions.cs.
using System.Diagnostics.CodeAnalysis;
[module: SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", Justification = "Because I said so!", MessageId = "XYZ", Scope = "namespace", Target = "XYZ.Blah")]
Puoi anche abbreviare il CheckId
Proprietà se vuoi, ma è bene sapere cosa significa CA1709. Se non ne hai voglia, funziona anche:
using System.Diagnostics.CodeAnalysis;
[module: SuppressMessage("Microsoft.Naming", "CA1709", Justification = "Because I said so!", MessageId = "XYZ", Scope = "namespace", Target = "XYZ.Blah")]
E infine ... tutto ciò sarà infruttuoso a meno che tu non includa il simbolo "Code_Analysis" nella tua build. Vai a Propries> Build e aggiungi il simbolo di compilazione condizionale.
Altri suggerimenti
I acrionimi non sono pensati per essere tutti maiuscola Convenzioni di denominazione .NET. Per esempio HttpResponse
eccetera.
Dal Convenzioni di capitalizzazione:
L'involucro degli acronimi dipende dalla lunghezza dell'acronimo. Tutti gli acronimi sono lunghi almeno due caratteri. Ai fini di queste linee guida, se un acronimo è esattamente due personaggi, è considerato un breve acronimo. Un acronimo di tre o più personaggi è un lungo acronimo.
Le seguenti linee guida specificano l'involucro adeguato per acronimi brevi e lunghi. Le regole dell'involucro dell'identificatore hanno la precedenza sulle regole dell'involucro dell'acronimo.
Capitalizzare entrambi i personaggi di acronimi a due caratteri, tranne la prima parola di un identificatore a cassetta di cammello.
Una proprietà di nome Dbrate è un esempio di un breve acronimo (DB) usato come prima parola di un identificatore a causa di Pascal. Un parametro chiamato Iochannel è un esempio di un breve acronimo (IO) usato come prima parola di un identificatore a causa di cammello.
Capitalizzare solo il primo carattere di acronimi con tre o più caratteri, tranne la prima parola di un identificatore a cassetta di cammello.
Una classe denominata XMLWRITER è un esempio di un lungo acronimo usato come prima parola di un identificatore a causa di Pascal. Un parametro chiamato HtmlReader è un esempio di un lungo acronimo usato come prima parola di un identificatore a cassetta di cammello.
Se stavi controllando i nomi tramite StyleCop, potresti usare StyleCop+ (Regole personalizzate) che supporta l'elenco delle abbreviazioni configurabili.