Compartilhar via


Visão Geral de supressão em código-fonte

Supressão de código-fonte é a capacidade de suprimir ou ignorar violações de análise de código por meio do uso do SuppressMessage atributo.The SuppressMessage attribute é um atributo condicional, que está incluído nos metadados de IL de seu conjunto de código gerenciado somente se o símbolo de compilar CODE_ANALYSIS é definido no momento da compilar.No C++, duas macros CA_SUPPRESS_MESSAGE e CA_GLOBAL_SUPPRESS_MESSAGE, obtêm a mesma coisa.

Recomendamos que você use supressões de código-fonte em depurar ou check-in cria, para eliminar a possibilidade de remessa os metadados de supressão de código-fonte e comprometer a execução ou o desempenho por causa de inchaço metadados por engano.

Observação:

Você não necessário mão código esses atributos você mesmo.Para obter mais informações, consulte Como: Suprimir Avisos usando o item de menu.

Atributo SuppressMessage

Quando você clica com o botão direito do mouse em um aviso de análise de código no Lista de erros e clicar Suprimir mensagem (NS), a SuppressMessage atributo é adicionado no seu código ou ao arquivo de global supressões do projeto.

The SuppressMessage atributo tem o seguinte formato:

<Scope:SuppressMessage("Rule Category", "Rule Id", "Justification", "MessageId", Scope = "Scope", Target = "Target")>
[Scope:SuppressMessage("Rule Category", "Rule Id", "Justification", "MessageId", Scope = "Scope", Target = "Target")]

Onde:

  • Categoria de regra - A categoria na qual a regra está definida.

  • ID de regra - O identificador para a regra.O suporte inclui tanto um nome curto e longo para a ID da regra.O nome curto é CAXXXX; o nome longo é CAXXXX:FriendlyTypeName.

  • justificação - O texto que é usado para documentar o motivo para suprimir a mensagem.

  • ID de mensagem - Identificador exclusivo de um problema para cada mensagem.

  • Escopo - O destino em que o aviso é sendo suprimido.Se o destino não for especificado, ele é definido como o destino do atributo.Há suporte para os seguintes escopos:

    • Module

    • Namespace

    • Resource

    • Type (Tipo)

    • Membro

    • Parâmetro

  • Destino - Um identificador usado para especificar o destino em que o aviso é sendo suprimido.Ele deve conter um nome totalmente qualificado de item.

Uso SuppressMessage

Avisos de análise de código são suprimidos no nível ao qual uma instância do SuppressMessage atributo é aplicado.O objetivo disso é acoplar rigidamente as informações de combate o código onde ocorre a violação.

O formulário geral de supressão inclui a categoria de regra e um identificador de regra que contém uma representação opcional legível para o usuário do nome da regra.Por exemplo,

[SuppressMessage("Microsoft.Design", "CA1039:ListsAreStrongTyped")]

Se houver motivos de desempenho estrito para minimizar metadados de supressão de código-fonte, o nome da regra pode ser deixado check-out.A categoria de regra e ID de regra e juntas constituem um identificador de regra suficientemente exclusiva.Por exemplo,

[SuppressMessage("Microsoft.Design", "CA1039")]

Esse formato não é recomendado devido a problemas de sustentabilidade.

Suprimindo Múltiplas Violações dentro de um corpo de método

Atributos só podem ser aplicados para um método e não podem ser incorporados dentro do corpo do método.No entanto, você pode especificar o identificador de sistema autônomo a ID da mensagem para distinguir várias ocorrências de uma violação dentro de um 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 gerado

Compiladores de código gerenciado e algumas ferramentas de terceiros geram código para facilitar o desenvolvimento rápido de código.Código gerado pelo compilador que aparece em arquivos de fonte geralmente é marcado com o GenerateCodeAttribute atributo.

Você pode escolher se deseja suprimir avisos de análise de código e erros do código gerado.Para obter informações sobre como suprimir a esses avisos e erros, consulte Propriedades de análise de código para código gerenciado.

Observe que a análise de código ignora GenerateCodeAttribute quando ele é aplicado a um assembly inteiro ou um único parâmetro.Essas situações ocorrem raramente.

Supressões de nível global

A ferramenta de análise de código gerenciado examina atributos SuppressMessage que são aplicados no assembly, módulo, tipo, membro ou nível de parâmetro.Ele também aciona violações contra recursos e namespaces.Essas violações de serem aplicadas no nível global e são escopo e direcionadas.Por exemplo, a seguinte mensagem suprime uma violação de namespace:

[module: SuppressMessage("Microsoft.Design", "CA1020:AvoidNamespacesWithFewTypes", Scope = "namespace", Target = "MyNamespace")]

Observação:

Quando você supressão um aviso com escopo de espaço para nome, ele suprime o aviso contra o espaço de nome.Ele não suprime o aviso contra tipos no namespace.

Qualquer supressão pode ser expressa especificando um escopo explícito.Esses supressões devem residir no nível global.Não é possível especificar a supressão de nível de membro decorando um tipo.

Supressões de nível global são a única forma de suprimir mensagens que fazem referência a código gerado pelo compilador não mapeia para fonte do usuário fornecida explicitamente.Por exemplo, o código a seguir suprime uma violação contra um construtor emitida compilador:

[module: SuppressMessage("Microsoft.Design", "CA1055:AbstractTypesDoNotHavePublicConstructors", Scope="member", Target="Microsoft.Tools.FxCop.Type..ctor()")]

Observação:

Destino sempre contém o nome totalmente qualificado de item .

Arquivo de Supressão global

O arquivo de supressão global mantém supressões supressões de nível global ou supressões não especificam um destino.Por exemplo, violações de nível de assembly são armazenadas neste arquivo.Além disso, alguns supressões do ASP.NET são armazenadas neste arquivo como configurações de nível de projeto não estão disponível para o código por trás de um formulário.

Consulte também

Referência

System.Diagnostics.CodeAnalysis