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.
Actualización: noviembre 2007
La supresión en el código fuente es la capacidad de suprimir o ignorar las infracciones de análisis de código mediante el uso del atributo SuppressMessage. SuppressMessagees un atributo condicional que sólo se incluye en los metadatos IL del ensamblado de código administrado si se define el símbolo de compilación CODE_ANALYSIS en tiempo de compilación. En C++, dos macros, CA_SUPPRESS_MESSAGE y CA_GLOBAL_SUPPRESS_MESSAGE, logran el mismo efecto.
Se recomienda utilizar las supresiones en el código fuente en versiones de depuración o de protección para eliminar la posibilidad de distribuir erróneamente los metadatos de supresión en el código fuente y poner en peligro la ejecución o el rendimiento debido al aumento excesivo de los metadatos.
Nota: |
|---|
No es necesario que controle mediante código estos atributos por sí mismo. Para obtener más información, vea Cómo: Suprimir advertencias mediante elemento de menú. |
Atributo SuppressMessage
Si hace clic con el botón secundario del mouse en una advertencia de análisis de código en la Lista de errores y hace clic en Suprimir mensajes, se agrega un atributo SuppressMessage al código o al archivo de supresiones globales del proyecto.
El atributo SuppressMessage tiene el formato siguiente:
<Scope:SuppressMessage("Rule Category", "Rule Id", "Justification", "MessageId", Scope = "Scope", Target = "Target")>
[Scope:SuppressMessage("Rule Category", "Rule Id", "Justification", "MessageId", Scope = "Scope", Target = "Target")]
Donde:
Rule Category: categoría en la que se define la regla.
Rule Id: identificador de la regla. Admite un nombre corto y uno largo para el Id. de regla. El nombre corto es CAXXXX; el nombre largo es CAXXXX:NombreDeArchivoDescriptivo.
Justification: texto usado para documentar la razón por la que se suprime el mensaje.
Message Id: identificador único de un problema para cada mensaje.
Scope: destino en el que se suprime la advertencia. Si no se especifica el destino, se establece en el destino del atributo. Los ámbitos admitidos incluyen los siguientes:
Módulo
Espacio de nombres
Recurso
Tipo
Miembro
Parámetro
Target: identificador usado para especificar el destino en el que se suprime la advertencia. Debe contener un nombre de elemento completo.
Uso de SuppressMessage
Las advertencias de análisis de código se suprimen en el nivel al que se aplica una instancia del atributo SuppressMessage. El propósito de esto es acoplar herméticamente la información de supresión al código donde se produce la infracción.
La forma de supresión general incluye la categoría de regla y un identificador de la regla, que contiene una representación legible opcional del nombre de la regla. Por ejemplo,
[SuppressMessage("Microsoft.Design", "CA1039:ListsAreStrongTyped")]
Si hay motivos de limitación del rendimiento para minimizar los metadatos de supresión del código fuente, se puede omitir el nombre de la regla propiamente dicho. La categoría y el identificador de regla constituyen en conjunto un identificador de regla suficientemente único. Por ejemplo,
[SuppressMessage("Microsoft.Design", "CA1039")]
No se recomienda este formato debido a los problemas del mantenimiento.
Suprimir varias infracciones contenidas en el cuerpo del método
Los atributos sólo se pueden aplicar a un método y no se puede incrustar dentro del cuerpo del método. Sin embargo, puede especificar el identificador como identificador del mensaje para distinguir varias apariciones de una infracción dentro de un método.
Imports System
Namespace InSourceSuppression
Public Class Class1
<System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", _
"CA1801:ReviewUnusedParameters", MessageId:="guid")> _
Shared Function IsValidGuid(ByVal guid As String) As Boolean
Try
Return True
Catch e As ArgumentNullException
Catch e As OverflowException
Catch e As FormatException
End Try
Return False
End Function
End Class
End Namespace
using System;
namespace InSourceSuppression
{
public class Class1
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage",
"CA1806:DoNotIgnoreMethodResults", MessageId = "System.Guid")]
public static bool IsValidGuid(string guid)
{
try
{
new Guid(guid); //Causes CA1806: DoNotIgnoreMethodResults
return true;
}
catch (ArgumentNullException) {}
catch (OverflowException) {}
catch (FormatException) {}
return false;
}
}
}
Código generado
Los compiladores de código administrado y algunas herramientas de otros fabricantes generan código para facilitar el desarrollo rápido de código. El código generado por un compilador que aparece en los archivos de código fuente suele ir marcado con el atributo GenerateCodeAttribute.
Puede elegir si desea suprimir las advertencias y los errores de análisis del código generado. Para obtener información sobre cómo suprimir tales advertencias y errores, vea Propiedades del análisis de código para código administrado.
Observe que el análisis de código ignora GenerateCodeAttribute cuando se aplica a un ensamblado completo o a un parámetro único. Estas situaciones se dan en raras ocasiones.
Supresiones de nivel global
La herramienta de análisis de código administrado examina los atributos SuppressMessage que se aplican en el nivel de ensamblado, módulo, tipo, miembro o parámetro. También desencadena las infracciones contra los recursos y espacios de nombres. Estas infracciones se deben aplicar en el nivel global y tienen un ámbito y un destino establecidos. Por ejemplo, el mensaje siguiente suprime una infracción de espacio de nombres:
[module: SuppressMessage("Microsoft.Design", "CA1020:AvoidNamespacesWithFewTypes", Scope = "namespace", Target = "MyNamespace")]
Nota: |
|---|
Cuando se suprime una advertencia con ámbito del espacio de nombres, se suprime la advertencia contra el propio espacio de nombres. No se suprime la advertencia contra los tipos dentro del espacio de nombres. |
Cualquier supresión se puede expresar especificando un ámbito explícito. Estas supresiones deben residir en el nivel global. No se puede especificar una supresión de nivel de miembro mediante la decoración de un tipo.
Las supresiones de nivel global son la única manera de suprimir mensajes que hacen referencia al código generado por el compilador que no se asigna explícitamente al código fuente de usuario proporcionado. Por ejemplo, el código siguiente suprime la infracción contra un constructor emitido por el compilador:
[module: SuppressMessage("Microsoft.Design", "CA1055:AbstractTypesDoNotHavePublicConstructors", Scope="member", Target="Microsoft.Tools.FxCop.Type..ctor()")]
Nota: |
|---|
El destino siempre contiene el nombre de elemento completo. |
Archivo de supresiones global
El archivo de supresión global mantiene supresiones de nivel global o que no especifican un destino. Por ejemplo, las infracciones de nivel de ensamblado se almacenan en este archivo. Además, algunas supresiones de ASP.NET se almacenan en este archivo porque no hay una configuración de nivel de proyecto para el código subyacente del formulario.
Nota: