Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Si colabora con su equipo a medida que crea código, a menudo resulta útil indicar que una advertencia no es aplicable. La supresión de infracciones de análisis de código indica a los miembros del equipo que se ha revisado el código y se puede suprimir la advertencia. En las secciones siguientes se describen las distintas formas de suprimir las infracciones de análisis de código mediante el IDE de Visual Studio.
Supresión de infracciones mediante el archivo EditorConfig
En el archivo EditorConfig de la solución o proyecto, agregue una entrada para cada regla que quiera configurar y establezca su gravedad en none
. Por ejemplo: dotnet_diagnostic.CA1822.severity = none
. Para obtener más información, consulte Configurar manualmente la gravedad de la regla en un archivo EditorConfig. Para agregar un archivo EditorConfig, consulte Agregar un archivo EditorConfig a un proyecto.
Supresión de infracciones en el código fuente
Puede suprimir infracciones en el código fuente mediante una directiva de preprocesador, que suprime las infracciones de una línea de código específica:
- Advertencia de #pragma de C#:
- Visual Basic: Deshabilitar advertencia
O bien, puede usar el atributo SuppressMessageAttribute para suprimir una advertencia en el código de C# y Visual Basic.
Supresión de infracciones mediante el editor de código
Para suprimir infracciones mediante el editor de código, siga estos pasos:
Coloque el cursor en la línea de código con el error y presione Ctrl+Punto (.) o Alt+Enter para abrir el menú Acciones rápidas.
Seleccione Suprimir o configurar problemas>Suprimir <número de la regla>, y luego elija en Origen o en Origen (atributo).
Si eliges Origen, verás una vista previa de la directiva de preprocesador agregada a tu código.
Si elige en origen (atributo), verá una vista previa del atributo SuppressMessageAttribute que se agregará al código.
Supresión de infracciones mediante la lista de errores
Para suprimir infracciones mediante la ventana Lista de errores, siga estos pasos:
En la ventana Lista de errores, seleccione las reglas que desea suprimir.
Haga clic con el botón derecho y seleccione Suprimir>en origen.
Se abre el cuadro de diálogo Vista previa de los cambios y se muestra una vista previa de la directiva de advertencia de C# #pragma o la directiva de advertencia de Visual Basic #Disable agregada al código fuente.
Seleccione Aplicar para guardar los cambios en el archivo de código.
Excluir diagnósticos de compilación de la lista de errores
Si no ve la opción de menú Suprimir en la ventana Lista de errores , es probable que la infracción provena de una compilación y no del análisis activo. La ventana Lista de errores muestra diagnósticos o infracciones de reglas, tanto del análisis de código activo como de las compilaciones. Dado que los diagnósticos de compilación pueden estar obsoletos, por ejemplo, si editó el código para corregir la infracción, pero no lo recompiló, no siempre puede suprimir estos diagnósticos de la lista de errores.
Los diagnósticos del análisis en directo o IntelliSense siempre se up-to-date con los orígenes actuales y siempre se pueden suprimir de la lista de errores. Para excluir los diagnósticos de compilación de la selección, siga estos pasos:
En la lista desplegable del filtro de origen Filtro de origen de Lista de Errores, cambie la selección de Compilar + IntelliSense a solo IntelliSense.
Seleccione los diagnósticos que desea suprimir y continúe como se describió anteriormente.
Supresión de infracciones mediante un archivo de supresión global
El archivo de supresión global usa el atributo SuppressMessageAttribute para suprimir las infracciones de código.
Uso de un archivo de supresión global desde el editor de código
Para suprimir infracciones con un archivo de supresión global mediante el editor de código, siga estos pasos:
En el editor de código, coloque el cursor en una línea de código con un problema y pulse Ctrl+Punto (.) o Alt+Entrar para abrir el menú Acciones rápidas.
Seleccione Suprimir <número> de regla y, a continuación, elija en Archivo de supresión.
Visual Studio crea una pestaña en el editor de código que contiene el nuevo archivo de supresión global.
Usar un archivo de supresión global de la lista de errores
Para suprimir infracciones con un archivo de supresión global mediante la ventana Lista de errores, siga estos pasos:
En la ventana Lista de errores, seleccione las reglas que desea suprimir.
Haga clic con el botón derecho y seleccione Suprimir>en archivo de supresión.
Se abre el cuadro de diálogo Vista previa de los cambios y se muestra una vista previa del SuppressMessageAttribute atributo agregado al archivo de supresión global.
Seleccione Aplicar para guardar el archivo de supresión global.
Suprimir todas las infracciones actuales
La supresión de todas las infracciones actuales se conoce a veces como baselining. Para suprimir todas las infracciones actuales de una solución o proyecto, siga estos pasos:
En la barra de menús de Visual Studio, seleccione Analizar>Compilar y Suprimir Problemas Activos.
Seleccione Para la solución para suprimir las infracciones de toda la solución, o seleccione Para <nombre del proyecto> para suprimir las infracciones solo para el proyecto.
Suprimir infracciones mediante la configuración del proyecto
Para suprimir infracciones mediante la configuración del proyecto del Explorador de soluciones, siga estos pasos:
En el Explorador de soluciones, seleccione el proyecto.
Haga clic con el botón derecho y, a continuación, seleccione Propiedades (o presione Alt + Entrar).
En la ventana Propiedades, seleccione Análisis de Código en el panel izquierdo y, a continuación, desactive Suprimir los resultados del código generado.
Supresión de infracciones mediante un conjunto de reglas
En el editor del conjunto de reglas, desactive la casilla situada junto a su nombre o establezca Acción en Ninguno.
Supresión en el código fuente y el atributo SuppressMessageAttribute
La supresión en el origen (ISS) usa el SuppressMessageAttribute atributo para suprimir una advertencia. Puede agregar el SuppressMessageAttribute
atributo al archivo de origen cerca del segmento de código que generó la advertencia.
Puede escribir el atributo manualmente en el editor de código o agregar el atributo automáticamente de la siguiente manera:
En el editor de código, coloque el cursor en una línea de código con un problema y pulse Ctrl+Punto (.) o Alt+Entrar para abrir el menú Acciones rápidas.
Seleccione Suprimir o configurar problemas>Suprimir <número> de regla en el menú Acciones rápidas.
Realice uno de los pasos siguientes:
Seleccione en Origen (atributo) .
Visual Studio agrega un
SuppressMessageAttribute
atributo al código.Seleccione en Archivo de supresión.
Visual Studio crea una pestaña en el editor de código que contiene un nuevo archivo de supresión global con
SuppressMessageAttribute
atributos.
El SuppressMessageAttribute
atributo es un atributo condicional, que se incluye en los metadatos del ensamblado de código administrado. Este atributo solo se incluye si el CODE_ANALYSIS
símbolo de compilación se define en tiempo de compilación.
Solo en el código de C++ y la CLI, use las macros CA_SUPPRESS_MESSAGE
o CA_GLOBAL_SUPPRESS_MESSAGE
en el archivo de encabezado para agregar el atributo .
Si migra un proyecto a la versión más reciente de Visual Studio, es posible que vea un gran número de advertencias de análisis de código. Si no está listo para corregir las advertencias, puede suprimir todas ellas seleccionando Analizar>Compilar y Suprimir problemas activos.
Nota:
No utilices las supresiones en el código fuente en las compilaciones finales para evitar el envío accidental de los metadatos de supresión.
Formato de atributo SuppressMessageAttribute
El SuppressMessageAttribute
atributo tiene el siguiente formato:
[Scope:SuppressMessage("Rule Category", "Rule Id", Justification = "Justification", MessageId = "MessageId", Scope = "Scope", Target = "Target")]
Las propiedades del atributo incluyen:
Category
: categoría de la regla. Para obtener más información sobre las categorías de reglas de análisis de código, consulte Reglas de calidad de código.CheckId:
Identificador de la regla. El soporte incluye un nombre corto y largo para el identificador de regla. El nombre corto esCAXXXX
; el nombre largo esCAXXXX:FriendlyTypeName
.Justification
: el texto usado para documentar el motivo para suprimir el mensaje.MessageId
: identificador único del problema para cada mensaje.Scope
: destino en el que se suprime la advertencia. Si no se especifica el destino, el sistema lo establece en el destino del atributo . Entre los ámbitos admitidos se incluyen:module
: Este ámbito suprime las advertencias contra un ensamblado. Se trata de una supresión global que se aplica a todo el proyecto.resource
: (Legacy FxCop solo) Este ámbito suprime las advertencias en la información de diagnóstico, escrita en los archivos de recursos que forman parte del módulo (ensamblado). Este ámbito no es consultado ni respetado en los compiladores de C#/VB para diagnósticos del analizador de Roslyn, que solo analizan archivos fuente.type
: Este ámbito suprime las advertencias de un tipo.member
: este alcance suprime las advertencias relacionadas con un miembro.namespace
: este ámbito suprime las advertencias en el propio espacio de nombres. No suprime las advertencias contra los tipos dentro del espacio de nombres.namespaceanddescendants
: (Requiere la versión 3.x del compilador o una superior y Visual Studio 2019 o una versión posterior) Este alcance suprime las advertencias en un espacio de nombres y todos sus símbolos descendientes. El análisis heredado omite elnamespaceanddescendants
valor.
Target
: identificador que especifica el destino en el que se suprime la advertencia. Debe contener un nombre de componente completamente calificado.
Cuando vea advertencias en Visual Studio, puede ver ejemplos de SuppressMessageAttribute
agregando una supresión al archivo de supresión global. El atributo de supresión y sus propiedades necesarias aparecen en una ventana de vista previa.
Uso de SuppressMessageAttribute
Las advertencias de análisis de código se suprimen en el nivel al que se aplica el SuppressMessageAttribute atributo. Por ejemplo, el atributo se puede aplicar en el nivel de ensamblado, módulo, tipo, miembro o parámetro. El propósito de aplicar este atributo es acoplar estrechamente la información de supresión al código donde se produce la infracción.
La forma general de supresión incluye la categoría de regla y un identificador de regla, que contiene una representación opcional legible del nombre de la regla. Por ejemplo:
[SuppressMessage("Microsoft.Design", "CA1039:ListsAreStrongTyped")]
Si hay motivos de rendimiento estrictos para minimizar los metadatos de supresión en el origen, se puede omitir el nombre de la regla. La categoría de regla y su identificador de regla forman un identificador de regla suficientemente único. Por ejemplo:
[SuppressMessage("Microsoft.Design", "CA1039")]
Por motivos de mantenimiento, no se recomienda omitir el nombre de la regla.
Suprimir violaciones selectivas dentro del cuerpo de un método
Los atributos de supresión se pueden aplicar a un método, pero no se pueden insertar dentro de un cuerpo del método. Todas las infracciones de una regla determinada se suprimen si agrega el SuppressMessageAttribute atributo al método .
En algunos casos, es posible que desee suprimir una instancia determinada de la infracción. Considere el ejemplo en el que el código futuro no está exento automáticamente de la regla de análisis de código. Algunas reglas de análisis de código permiten suprimir una instancia determinada de la infracción mediante la MessageId
propiedad del SuppressMessageAttribute
atributo . En general, las reglas heredadas para las infracciones en un símbolo determinado (una variable local o un parámetro) respetan la propiedad MessageId
.
CA1500:VariableNamesShouldNotMatchFieldNames es un ejemplo de esta regla. Sin embargo, las reglas heredadas de infracciones en el código ejecutable (sin símbolos) no respetan la MessageId
propiedad . Además, los analizadores de .NET Compiler Platform ("Roslyn") no respetan la MessageId
propiedad .
Para suprimir una infracción de símbolo determinada de una regla, especifique el nombre del símbolo para la MessageId
propiedad del SuppressMessageAttribute
atributo. En el ejemplo siguiente se muestra el código con dos infracciones de CA1500:VariableNamesShouldNotMatchFieldNames: una infracción de la name
variable y otra infracción para la age
variable. Solo se suprime la infracción del símbolo age
.
public class Animal
{
int age;
string name;
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1500:VariableNamesShouldNotMatchFieldNames", MessageId = "age")]
private void PrintInfo()
{
int age = 5;
string name = "Charlie";
Console.WriteLine($"Age {age}, Name {name}");
}
}
Supresiones de nivel global
La herramienta de análisis de código administrado examina los SuppressMessageAttribute
atributos que se aplican en el nivel de ensamblado, módulo, tipo, miembro o parámetro. También envía infracciones contra los recursos y los espacios de nombres. Estas infracciones deben aplicarse en el nivel global y tienen como ámbito y tienen como destino. Por ejemplo, el siguiente mensaje suprime una infracción de espacio de nombres:
[module: SuppressMessage("Microsoft.Design", "CA1020:AvoidNamespacesWithFewTypes", Scope = "namespace", Target = "MyNamespace")]
Para las supresiones de nivel global:
Cuando se suprime una advertencia con un
namespace
ámbito, se suprime la advertencia en el propio espacio de nombres. No suprime la advertencia contra tipos en el espacio de nombres.Target
siempre contiene el nombre completo del elemento.Cualquier supresión se puede expresar especificando un ámbito explícito. Estas supresiones deben residir en el nivel global. No se puede especificar la supresión de nivel de miembro al modificar un tipo.
Las supresiones de nivel global son la única manera de suprimir los mensajes que hacen referencia al código generado por el compilador que no se asigna a un origen de usuario proporcionado explícitamente. Por ejemplo, el código siguiente suprime una infracción en un constructor emitido por el compilador:
[module: SuppressMessage("Microsoft.Design", "CA1055:AbstractTypesDoNotHavePublicConstructors", Scope="member", Target="Microsoft.Tools.FxCop.Type..ctor()")]
Archivo de supresión global
El archivo de supresión global mantiene supresiones que son supresiones de nivel global o supresiones que no especifican un destino. Por ejemplo, las supresiones de infracciones a nivel de ensamblaje se almacenan en este archivo. Además, algunas supresiones de ASP.NET se almacenan en este archivo porque la configuración de nivel de proyecto no está disponible para el código subyacente a un formulario. Visual Studio crea y agrega un archivo de supresión global a su proyecto la primera vez que selecciona la opción Archivo de supresión en el proyecto del comando Suprimir en la ventana Lista de errores.
Ámbito de supresión de módulos
Puede suprimir las infracciones de calidad del código en todo el ensamblado utilizando el ámbito module
.
Por ejemplo, el siguiente atributo del archivo de proyecto GlobalSuppressions suprime la infracción ConfigureAwait para un proyecto de ASP.NET Core:
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Reliability", "CA2007:Consider calling ConfigureAwait on the awaited task", Justification = "ASP.NET Core doesn't use thread context to store request context.", Scope = "module")]
Código generado
Los compiladores de código administrado y algunas herramientas externas generan código para ayudar al desarrollo rápido de código. El código generado por el compilador que aparece en los archivos de código fuente se marca con el GeneratedCodeAttribute
atributo .
Para el análisis de código fuente, puede suprimir los mensajes en el código generado en un archivo .editorconfig . Para obtener más información, vea Excluir código generado.
Para el análisis de código heredado, puede elegir si desea suprimir advertencias y errores de análisis de código para el código generado. Para obtener información sobre cómo suprimir estas advertencias y errores, vea Suprimir advertencias de análisis de código para el código generado.
Nota:
El análisis de código omite GeneratedCodeAttribute
cuando se aplica a un ensamblado completo o a un único parámetro.