c# - tutorial - stylecop visual studio 2017
Cómo suprimir una advertencia de StyleCop? (10)
¿No puedes quitar la regla en lugar de ensuciar tu código?
Lo mismo ocurre con FxCop ...
Estoy usando StyleCop y quiero suprimir algunas advertencias que no se adaptan a mi estilo. Prefiero tener solución para
1) supresión de código en línea
2) Supresión de la configuración global
He buscado en Internet, pero todavía no estoy seguro de cómo hacer la supresión.
Para el método 1), dijeron agregar las líneas:
[assembly: SuppressMessage ("Microsoft.Design", "SA1202: todos los métodos privados deben colocarse después de todos los métodos públicos", Scope = "namespace", Target = "Consus.Client.ClientVaultModule.Services.OnlineDetection")]
Pero no dicen dónde ni qué espacio de nombres usar.
Para el método 2), dijeron usar el archivo GlobalSuppress, pero no parece fácil buscar 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, lo cual es molesto ya que agrupo mis códigos relacionados en regiones. Quiero suprimir esas advertencias solo por algunos métodos determinados.
1. En su caso, el atributo correcto SuppressMessage
debería tener el siguiente aspecto:
[SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess")]
private void SomeMethod()
{
}
Tenga en cuenta que puede colocarlo en cualquier otro elemento (por ejemplo, en la clase) y luego se suprimirán todas las infracciones similares en toda la clase.
También estoy de acuerdo en que es bastante obvio qué escribir en estos campos.
En realidad, el primero debe ser el nombre completo de la clase de analizador StyleCop y se puede encontrar a partir del código fuente (por ejemplo, desde here ). El segundo debe comenzar con el código de la regla , luego dos puntos y el nombre de la enumeración de la regla (por suerte, siempre se ve como el nombre de la regla que se muestra en el Editor de configuraciones, pero sin espacios en blanco).
2. Respecto a la supresión de reglas "globalmente", ¿por qué no las apagas solo 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 deseas (como se describe here ).
¡Buena suerte!
Además de las respuestas útiles que ya están en su lugar:
Si suprime una advertencia en el archivo de supresión GlobalSuppressions.cs
, puede editar esa [assembly: SuppressMessage(StyleCop...blabla
line y eliminar por completo las etiquetas Scope=...
y Target=...
Eso hace que la supresión global en el proyecto.
Alternativamente, podría mover el código en regiones en clases parciales. Entonces, el problema con la regla de stylecop desaparecerá.
Comenzando con StyleCop 4.3.2, es posible suprimir el reporte de violaciones de reglas agregando atributos de supresión dentro del código fuente.
Supresiones de reglas http://stylecop.soyuz5.com/Suppressions.html
pero dice -
Supresiones globales
StyleCop no es compatible con la noción de supresiones globales o supresiones de nivel de archivos. Las supresiones deben colocarse en un elemento de código.
Esto es lo que necesitas:
[SuppressMessage("Microsoft.StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess")]
Lea la advertencia de Style Cop, buscando el 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 stylecop.com/docs/SA1202.html
Copie la línea etiquetada ''Cómo suprimir violaciones''. Pegue el atributo sobre la clase sobre el cual Style Cop gime
[SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess", Justification = "Reviewed.")]
Puede deshabilitar las reglas que no desea en el archivo Settings.StyleCop, que se encuentra en la carpeta raíz del proyecto. Necesitará el espacio de nombres que contiene la regla, que se puede encontrar aquí: http://stylecop.soyuz5.com/StyleCop%20Rules.html
Código de archivo 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>
Si instaló StyleCop, puede hacer clic derecho 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.
Un ejemplo de supresión en línea sería similar a esto: examine 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 llamado GlobalSuppressions.cs
y podría verse así:
// 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.