Stylecop/fxcop 10 - ¿Cómo suprime correctamente un mensaje solo en un nivel de espacio de nombres?

StackOverflow https://stackoverflow.com/questions/6386902

Pregunta

FXCOP 10 se queja de lo siguiente:

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 que ... Quiero que el nombre de mi empresa aparezca en todo el proceso de 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 la suya porque su acrónimo es solo 2 letras.

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

Entonces, estaba buscando agregar un SuppressMessageAttribute para suprimir esta advertencia. Pero no estoy seguro de cómo hacerlo correctamente solo (o dónde siquiera pegarlo) para que solo afecte esta instancia. No quiero suprimir nada dentro de ese espacio de nombres porque quiero recibir otros errores que comete. Observé el MSDN y Google Buscado, pero no puedo encontrar nada que muestre cómo apuntar específicamente a esta instancia. Lo más cercano 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.

¿Fue útil?

Solución

MSDN - CA1709: los identificadores deben estar cubiertos correctamente:

Es seguro suprimir esta advertencia si tiene sus propias convenciones de nombres, 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 diccionario personalizado de análisis de código. Los términos especificados en el diccionario personalizado no causarán violaciones de esta regla. Para obtener más información, consulte cómo: Personalizar el diccionario de análisis de código.


Dicho esto, si te sientes justificado para suprimir el mensaje, 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 el mensaje o copiar como> Mensaje de supresión de nivel de módulo.

Deberías colocar el SuppressMessageAttributes en las ubicaciones apropiadas. Los atributos que suprimen una sola ubicación deben colocarse en esa ubicación, por ejemplo, por encima de un método, campo, propiedad o clase.

En su caso, no hay una ubicación específica para colocar el atributo (de forma predeterminada, debe copiar como [module: SuppressMessage(...)]. Esta es una buena indicación de que pertenece en la parte superior de un archivo si es una supresión de nivel de módulo particular a un archivo (por ejemplo, a un recurso específico para un archivo). O, y más probable, pertenece a 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 puedes acortar el CheckId Propiedad si lo desea, pero es bueno saber qué significa CA1709. Si no tiene ganas, 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 construcción. Vaya a Propiedades> Construir y agregar el símbolo de compilación condicional.

Otros consejos

Los acrymonios no están destinados a ser todos los mayúsculas en Convenciones de nombres de .NET. Por ejemplo HttpResponse etc.

Desde el convenciones de capitalización:

La carcasa de las acrónimos depende de la longitud del acrónimo. Todos los acrónimos tienen al menos dos caracteres. Para los fines de estas pautas, si un acrónimo es exactamente dos caracteres, se considera un acrónimo corto. Un acrónimo de tres o más personajes es un largo acrónimo.

Las siguientes pautas especifican la carcasa adecuada para acrónimos cortos y largos. Las reglas de la carcasa del identificador tienen prioridad sobre las reglas de carcasa de acrónimo.

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

Una propiedad llamada DBRATE es un ejemplo de un breve acrónimo (db) utilizado como la primera palabra de un identificador con casco Pascal. Un parámetro llamado Iochannel es un ejemplo de un breve acrónimo (IO) utilizado como la primera palabra de un identificador con casco de camello.

Capitalice solo el primer personaje de las acrónimos con tres o más caracteres, excepto la primera palabra de un identificador con casco de camello.

Una clase llamada XMLWriter es un ejemplo de un largo acrónimo utilizado como la primera palabra de un identificador con casco de pascal. Un parámetro llamado HTMLReader es un ejemplo de un largo acrónimo utilizado como la primera palabra de un identificador con camello.

Si estuviera revisando los nombres a través de Stylecop, podría usar Stylecop+ (Reglas personalizadas) que admite la lista de abreviaturas configurables.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top