2011-06-17 6 views
9

FxCop 10 se queja de lo siguiente:StyleCop/FxCop 10 - ¿Cómo se suprime correctamente un mensaje solo en un nivel de espacio de nombres?

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. 

El problema es ... Quiero que mi nombre de la empresa aparezca en mayúsculas porque XYZ es una abreviatura. La versión larga del nombre es demasiado larga para ser un espacio de nombres útil. Microsoft se sale con este tipo de cosas porque su acrónimo es de solo 2 letras.

using MS.Something; //No Complaint. 
using Microsoft.SomethingElse; //No Complaint. 

Por lo tanto, yo estaba buscando en la adición de un SuppressMessageAttribute para suprimir esta advertencia. Pero, no estoy seguro de cómo hacerlo correctamente solo (o dónde incluso pegarlo) para que SÓLO afecte a esta instancia. No quiero suprimir nada dentro de ese espacio de nombres porque quiero detectar cualquier otro error que cometa. Miré el msdn y google buscado pero no puedo encontrar nada que muestre cómo específicamente enfocar esta instancia. Lo más cerca que encontré fue Scope = "namespace" pero no estaba seguro de si eso significa que afecta el nombre real del espacio de nombres o si afecta todo dentro de ese espacio de nombres.

Respuesta

14

MSDN - CA1709: Identifiers should be cased correctly:

Es seguro para suprimir esta advertencia si usted tiene sus propias convenciones de nomenclatura, o si el identificador representa un nombre propio, por ejemplo, el nombre de una empresa o una tecnología.

También puede agregar términos específicos, abreviaturas y acrónimos que a un análisis de código diccionario personalizado.Los términos especificados en el diccionario personalizado no causarán violaciones de esta regla . Para obtener más información, vea Cómo para: Personalizar el Diccionario de análisis de código .


Dicho esto, si se siente justificado para suprimir el mensaje, lo que realmente no es difícil en absoluto. En FxCop 10 haga clic derecho en cualquier mensaje que desee suprimir y vaya a Copiar como> Suprimir mensaje o Copiar como> Mensaje de Supresión a nivel de módulo.

Debe colocar el SuppressMessageAttribute s en las ubicaciones correspondientes. Los atributos que suprimen una única ubicación deben colocarse en esa ubicación, por ejemplo, encima de un método, campo, propiedad o clase.

En su instancia, no hay una ubicación específica para colocar el atributo (de manera predeterminada, debe copiar como [module: SuppressMessage(...)]. Esta es una buena indicación de que pertenece o bien en la parte superior de un archivo si es un módulo supresión nivel particular de un archivo (por ejemplo, a un recurso específico en un archivo). O, y es más probable, que pertenece en un archivo GlobalSuppressions.cs.

using System.Diagnostics.CodeAnalysis; 

[module: SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", Justification = "Because I said so!", MessageId = "XYZ", Scope = "namespace", Target = "XYZ.Blah")] 

también puede acortar la propiedad CheckId si quiero, pero es bueno saber lo que significa CA1709. Si no te apetece, esto también funciona:

using System.Diagnostics.CodeAnalysis; 

[module: SuppressMessage("Microsoft.Naming", "CA1709", Justification = "Because I said so!", MessageId = "XYZ", Scope = "namespace", Target = "XYZ.Blah")] 

Y por último ... todo esto será infructuoso a menos que incluya el símbolo 'CODE_ANALYSIS' en su compilación. Vaya a Propiedades> Construir y agregue el símbolo de compilación condicional.

+3

+1. La clave aquí, que nunca he notado en ninguna otra documentación de FxCop, es el símbolo 'CODE_ANALYSIS'. ¡No sabía que tenía que ser agregado en VisualStudio, y no pude entender por qué FxCop no estaba ignorando nada! – CodingWithSpike

3

Los acrónimos no están destinados a ser todos mayúsculas en .NET naming conventions. Por ejemplo HttpResponse etc.

Desde el capitalization conventions:

carcasa de siglas depende de la longitud de las siglas. Todos los acrónimos tienen al menos dos caracteres de longitud. A los fines de estas directrices, si un acrónimo tiene exactamente dos caracteres, se considera un acrónimo corto. Un acrónimo de tres o más caracteres es un acrónimo largo.

Las siguientes pautas especifican la carcasa adecuada para acrónimos cortos y largos. Las reglas de mayúsculas y minúsculas tienen prioridad sobre las reglas de mayúsculas y minúsculas.

Capitalice ambos caracteres de los acrónimos de dos caracteres, excepto la primera palabra de un identificador de camello.

Una propiedad llamada DBRate es un ejemplo de un acrónimo corto (DB) utilizado como la primera palabra de un identificador de Pascal-cased. Un parámetro llamado ioChannel es un ejemplo de un acrónimo corto (IO) utilizado como la primera palabra de un identificador de camel-cased.

Escriba en mayúscula solo el primer carácter de los acrónimos con tres o más caracteres, excepto la primera palabra de un identificador de camello.

Una clase llamada XmlWriter es un ejemplo de un acrónimo largo utilizado como la primera palabra de un identificador de Pascal-cased. Un parámetro llamado htmlReader es un ejemplo de un acrónimo largo utilizado como la primera palabra de un identificador camel-cased.

+0

Oh, lo sé. Sin embargo, hay excepciones: "DB" por ejemplo. Estéticamente, sin embargo, me parece más legible ver 'XYZ.Blah' que' Xyz.Blah'. Especialmente para el nombre abreviado de la compañía. Por lo tanto ... Quiero suprimir el mensaje solo para esa instancia. :) – michael

+0

Oh, y lo siento. Quise decir "abreviatura" no acrónimo. El nombre de mi empresa se abrevia como XYZ. Lo arreglaré. – michael

+0

@Michael: es incluso más extraño que * las abreviaturas * sean mayúsculas, para ser sincero. Tenga en cuenta que las excepciones están cubiertas en la documentación, y esperaría que StyleCop lo supiera. Mientras que * usted * puede encontrarlo más legible para ver a XYZ.Blah, ciertamente encontraría lo contrario, acostumbrado a las convenciones normales de .NET. –

0

Si estaba comprobando nombres a través de StyleCop, podría usar StyleCop+ (reglas personalizadas) que admite la lista de abreviaturas configurables.

Cuestiones relacionadas