2010-07-20 10 views
48

Estoy usando StyleCop y quiero suprimir algunas advertencias que no se ajustan a mi estilo. Yo prefiero tener solución para¿Cómo suprimir una advertencia de StyleCop?

1) el código en línea suprimir
2) configuración global suprimir

He buscado en la Internet, pero still not sure cómo hacer la supresión.

Para el método 1), dijeron que añadir las líneas:

[assembly: SuppressMessage ("Microsoft.Design", "SA1202: Todos los métodos privados deben colocarse después de todos los métodos públicos", ámbito = "espacio de nombres", Target = "Consus.Client.ClientVaultModule.Services.OnlineDetection")]

Pero no dicen dónde y qué espacio de nombres que se utilizarán.

Para el método 2), dijeron usar el archivo GlobalSuppress, pero no parece fácil buscar un cómo hacerlo en este momento.

Por favor ayuda.

[Editado] En mi caso, tengo la advertencia sobre SA1202: Todos los métodos privados deben colocarse después de todos los métodos públicos que está molestando desde el grupo I mis códigos relacionados en regiones. Quiero suprimir esas advertencias solo por algunos métodos determinados.

+3

Idealmente, haga clic con el botón 'Eliminar' (o derecha -click, 'arreglar'). Pero StyleCop fue escrito por masoquistas, por lo que tienes que solucionar todos tus problemas tediosamente a mano. Si alguna vez hubo trabajo diseñado para ser hecho por una máquina, esto es todo. Que desperdicio. –

Respuesta

4

¿No puede quitar la regla en lugar de ensuciar su código?

Lo mismo sucede con FxCop ...

+0

Acabo de agregar la razón por la cual no puedo solear los códigos. Por favor mira mi pregunta editada. –

6

Si ha instalado StyleCop, puede hacer clic en su proyecto y habrá una opción StyleCop. Haga clic aquí y verá que puede evitar que ciertas reglas incluso se ejecuten en contra de su proyecto. Además, puede crear un archivo de reglas separado para compartir entre diferentes proyectos. Esto significa que puede configurar las reglas de la manera que desee y luego compartir esa configuración entre todos sus proyectos.

Para anulaciones individuales, SuppressMessage es el camino a seguir.

18

Un ejemplo de supresión de línea sería similar a esto - examinar los espacios de nombres en el código en comparación con la supresión

namespace Soapi 
{ 
     ///<summary> 
     ///</summary> 
     ///<param name = "message"></param> 
     ///<param name = "statusCode"></param> 
     ///<param name = "innerException"></param> 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1305:SpecifyIFormatProvider", MessageId = "System.String.Format(System.String,System.Object,System.Object)")] 
     public ApiException(string message, ErrorCode statusCode, Exception innerException) 
      : base(String.Format("{0}\r\nStatusCode:{1}", message, statusCode), innerException) 
     { 
      this.statusCode = statusCode; 
     } 

Un archivo de supresión global es un archivo en la raíz de su proyecto denominado GlobalSuppressions.cs y puede tener un aspecto como este:

// This file is used by Code Analysis to maintain SuppressMessage 
// attributes that are applied to this project. 
// Project-level suppressions either have no target or are given 
// a specific target and scoped to a namespace, type, member, etc. 
// 
// To add a suppression to this file, right-click the message in the 
// Error List, point to "Suppress Message(s)", and click 
// "In Project Suppression File". 
// You do not need to add suppressions to this file manually. 

[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1305:SpecifyIFormatProvider", MessageId = "System.String.Format(System.String,System.Object,System.Object,System.Object)", Scope = "member", Target = "Soapi.ApiException.#.ctor(System.String,Soapi.ErrorCode,System.String,System.Exception)")] 

Y puede generar este código automáticamente haciendo clic derecho en la advertencia.

+3

He intentado hacer clic derecho en la advertencia (en la lista de error/advertencia) pero no hay elemento de menú contextual que me permita suprimirlo. Estoy usando VS 2010. ¿Sabes por qué? –

+0

@Nam - No estoy seguro, el ejemplo que cito es el uso de vs2008. déjame encender el 2010 y echa un vistazo. –

+0

@poet: He publicado mi pregunta relacionada aquí http://stackoverflow.com/questions/3287957/how-to-supress-stylecop-warning-sa1201-all-methods- must-be-placed-after-all- pro –

44

Esto es lo que necesita:

[SuppressMessage("Microsoft.StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess")] 
+7

¿Cómo dedujeron esas dos cadenas mágicas? Todo el OP publicado fue el código 'SA1202'. Tengo un problema similar (código 'SP0100') y no puedo deducir las cadenas correspondientes. –

+0

@Colonel Panic: puede obtener la primera cadena del mensaje de advertencia de StyleCop cuando lo ejecuta. P.ej. "SA1202: CSharp.OrderingRules: blahblah". A continuación, abra el archivo de configuración de StyleCop con el editor y busque con el código SA para encontrar la regla real y su nombre corto. – Hirvox

+6

si va a http://www.stylecop.com/docs/SA1202.html (o direcciones de página similares para las otras advertencias) puede encontrar detalles muy claros de la sintaxis del mensaje suprimir. – Seph

1

alternativa usted puede mover el código en regiones en las clases parciales. Entonces, el problema con la regla de stylecop desaparecerá.

9

Comenzando con StyleCop 4.3.2, es posible suprimir el informe de violaciones de reglas agregando atributos de supresión dentro del código fuente.

supresiones Regla http://stylecop.soyuz5.com/Suppressions.html

pero dice -

supresiones Global

StyleCop no soporta la idea de supresiones o globales supresiones a nivel de archivo. Las supresiones se deben colocar en un elemento de código .

+0

Se proporciona la misma información aquí también - http://blogs.msdn.com/b/sourceanalysis/archive/2009/08/10/rule-suppressions.aspx – akjoshi

2

1. En su caso, corregir SuppressMessage atributo debe recibir el siguiente aspecto:

[SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess")] 
private void SomeMethod() 
{ 
} 

Tenga en cuenta que se puede colocar en cualquier otro elemento (por ejemplo, en la clase - entonces todos los violaciónes similares en toda la clase será suprimido).

También estoy de acuerdo en que es bastante obvio qué escribir en estos campos.

En realidad, el primero uno debe ser el nombre completo de StyleCop clase analizador y se puede conocer a partir del código fuente (por ejemplo, de here). El segundo debería comenzar con código de regla, luego dos puntos y el nombre de enumeración de reglas (afortunadamente, siempre se ve como el nombre de regla que se muestra en el Editor de configuraciones, pero sin espacios en blanco).

2. En cuanto a las reglas de supresión "globalmente", ¿por qué no las apaga simplemente a través del Editor de configuraciones? Los archivos de configuración se heredan a través del sistema de archivos, por lo que fácilmente podría tener un archivo de configuración "principal" en la "parte superior" de la estructura de su carpeta y algunos otros archivos (manteniendo la "diferencia" del principal) con excepciones para algunos proyectos. si así lo desea (como se describe here).

Buena suerte!

2

Lea la advertencia de Style Cop, en busca del código alfanumérico. En tu caso 'SA1202'. Luego vaya a la página correspondiente en el sitio web de Style Cop. Cambie la URL según corresponda http://www.stylecop.com/docs/SA1202.html

Copie la línea etiquetada 'Cómo suprimir violaciones'. Pegar el atributo encima de la clase de la que se queja Estilo Cop

[SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess", Justification = "Reviewed.")] 
0

Puede desactivar las reglas no desea en el archivo Settings.StyleCop, que está en la carpeta raíz del proyecto. Tendrá el espacio de nombres que contiene la regla, que se puede encontrar aquí: código del archivo http://stylecop.soyuz5.com/StyleCop%20Rules.html

Settings.stylecop para su referencia:

<StyleCopSettings Version="105"> 
    <Analyzers> 
    <Analyzer AnalyzerId="StyleCop.CSharp.LayoutRules"> 
     <Rules> 
     <Rule Name="ElementsMustBeSeparatedByBlankLine"> 
      <RuleSettings> 
      <BooleanProperty Name="Enabled">False</BooleanProperty> 
      </RuleSettings> 
     </Rule> 
     </Rules> 
     <AnalyzerSettings /> 
    </Analyzer> 
    </Analyzers> 
</StyleCopSettings> 
+0

Esto sería más útil si pudieras mostrar algún ejemplo. ajustes que el OP podría querer. – sorak

Cuestiones relacionadas