2009-11-18 20 views
33

Estamos usando StyleCop en nuestros proyectos de C#. Sin embargo, en algunos casos nos gustaría evitar las reglas. Sé que puede agregar // <auto-generated /> al comienzo del archivo para hacer que StyleCop lo ignore. Sin embargo, no quiero ignorar las reglas para todo el archivo, solo un bloque de código dentro de él.Desactivar StyleCop para líneas específicas

¿Puedo desactivar StyleCop para líneas específicas de alguna manera?

Respuesta

35

Puede suprimir reglas agregando atributos a bloques de código. Esto es un ejemplo sencillo de una clase a partir de la entrada en el blog vinculado a continuación, pero se puede hacer en varios miembros de forma individual:

[SuppressMessage("Microsoft.StyleCop.CSharp.DocumentationRules", "SA1600:ElementsMustBeDocumented")] 
public class MyUndocumentedClass 
{ 
    public void MyUndocumentedMethod {} 
} 

Hay una quick overview en una entrada del blog de MSDN y una fuller description of the attributes en MSDN.

+0

Gracias! Esto debería funcionar, aunque esperaba un enfoque más simple. Estaba esperando un método en el que simplemente dijera "ignorar StyleCop para estas líneas", en lugar de tener que encontrar el texto correcto para los nombres de estilo, etc. Esperando ver si esto es posible. – stiank81

+2

AFAIK no es posible, la capacidad de suprimir mensajes es en sí misma una adición bastante reciente. – FinnNk

+0

Gracias. Probablemente estés en ese momento, pero voy a dejar la pregunta por un rato más. – stiank81

11

Una cuestión de edad, pero sé que en busca de una respuesta que encontró que en StyleCop 4.4 ahora se puede poner algo como esto - o una de estas líneas en un método:

[SuppressMessage("Microsoft.StyleCop.CSharp.DocumentationRules", "*", Justification = "Risky to change manually")] 
[SuppressMessage("Microsoft.StyleCop.CSharp.SpacingRules", "*", Justification = "Risky to change manually")] 
[SuppressMessage("Microsoft.StyleCop.CSharp.MaintainabilityRules", "*", Justification = "Risky to change manually")] 
[SuppressMessage("Microsoft.StyleCop.CSharp.LayoutRules", "*", Justification = "Risky to change manually")] 
[SuppressMessage("Microsoft.StyleCop.CSharp.NamingRules", "*", Justification = "Risky to change manually")] 
[SuppressMessage("Microsoft.StyleCop.CSharp.ReadabilityRules‌​", "*", Justification = "Risky to change manually")] 
[SuppressMessage("Microsoft.StyleCop.CSharp.OrderingRules", "*", Justification = "Risky to change manually")] 
  • Nota: I podría faltar una o dos de las categorías de reglas
+1

Esto hizo el truco para mí. FYI, edité los dos últimos mensajes ya que tenían "Microsoft.StyleCop.CSharp" duplicado en el espacio de nombres –

+1

Recientemente tuve que agregar esto para una clase de biblioteca y encontré que necesitaba [SuppressMessage (" Microsoft.StyleCop.CSharp.ReadabilityRules "," * ", Justification =" Esto es código de biblioteca ")] así como –

+1

Las reglas de ordenamiento es otra que puede necesitar agregar:' [SuppressMessage ("Microsoft.StyleCop.CSharp.OrderingRules" , "*", Justificación = "Arriesgado para cambiar manualmente")] ' –

5

Este guy parece tener un buen truco general de ignorar; Sugiere poner esto en la parte superior del archivo - probado y trabajando con R #

//------------------------------------------------------------------------------ 
// <auto-generated> 
// This code was generated by a tool. 
// </auto-generated> 
//------------------------------------------------------------------------------ 

Útil para cuando se está produciendo una carga de texto modelo para adherirse a una interfaz principalmente sin aplicarse, por ejemplo.

0

Puede colocar la pieza de código entre un código generado de nombre de región y se omitirá.

0

Decorar su clase o método con el StyleCop atributo siguiente:

[GeneratedCode("Tool Goes Here", "Message Goes Here")] 
Cuestiones relacionadas