Visão geral de supressão na origem
a exclusão em origem é a capacidade de suprimir ou ignorar violações de análise de código em código gerenciado adicionando o atributo de SuppressMessage aos segmentos de código que fazem com que as violações.O atributo é um atributo de SuppressMessage condicional que está incluído nos metadados de IL de seu assembly de código gerenciado apenas se o símbolo de compilação de CODE_ANALYSIS é definido em tempo de compilação.
Em C++/CLI, use as macros CA_SUPPRESS_MESSAGE ou CA_GLOBAL_SUPPRESS_MESSAGE no arquivo de cabeçalho, adicione o atributo.
Você não deve usar exclusões em origem em construções de versão para evitar enviar os metadados de exclusão em origem acidentalmente.Devido à despesa o custo de processamento de exclusão em origem, o desempenho de seu aplicativo também pode ser desatualizado incluindo os metadados de exclusão em origem.
Observação |
---|
Você não precisa fornecer o código esses atributos você mesmo.Para obter mais informações, consulte Como suprimir avisos usando o item de menu.O item de menu não estará disponível para o código C++. |
Atributo de SuppressMessage
Quando você clica com o botão direito do mouse em um aviso de análise de código em Lista de Erros e clique em Suprimir Mensagem, um atributo de SuppressMessage é adicionado ou em seu código ou ao projeto exclusões globais arquivo.
O atributo de SuppressMessage tem o seguinte formato:
<Scope:SuppressMessage("Rule Category", "Rule Id", Justification = "Justification", MessageId = "MessageId", Scope = "Scope", Target = "Target")>
[Scope:SuppressMessage("Rule Category", "Rule Id", Justification = "Justification", MessageId = "MessageId", Scope = "Scope", Target = "Target")]
[C++]
CA_SUPPRESS_MESSAGE("Rule Category", "Rule Id", Justification = "Justification", MessageId = "MessageId", Scope = "Scope", Target = "Target")
Where:
Categoria de regra - A categoria na qual a regra é definida.Para obter mais informações sobre categorias da regra de análise de código, consulte Avisos da análise de código para código gerenciado.
Use a ID - O identificador da regra.O suporte inclui um nome curto e longo para o identificador da regra.O nome curto é CAXXXX; o nome longo é CAXXXX:FriendlyTypeName.
Justificação - O texto usado para documentar a razão para suprimir a mensagem.
ID de mensagem - Identificador exclusivo de um problema para cada mensagem.
Escopo - O destino em que o aviso está sendo suprimido.Se o destino não for especificado, será definido como o destino do atributo.Os escopos com suporte incluem o seguinte:
Module
Namespace
Recurso
Tipo
Membro
Destino - Um identificador que é usado para especificar o destino em que o aviso está sendo suprimido.Deve conter um nome totalmente qualificada do item.
Uso de SuppressMessage
Os avisos da análise do código são suprimidos no nível a que uma instância do atributo de SuppressMessage é aplicada.O objetivo dessa é acoplar com segurança informações de exclusão ao código onde a violação ocorrer.
O formato geral de exclusão inclui a categoria de regra e um identificador da regra que contém uma representação legível opcional do nome da regra.Por exemplo,
[SuppressMessage("Microsoft.Design", "CA1039:ListsAreStrongTyped")]
Se houver motivo de desempenho restringidas para minimizar metadados de exclusão em origem, o próprio nome da regra pode ficar fora.A categoria de regra e o ID da regra suficientemente juntos constituem um identificador exclusivo da regra.Por exemplo,
[SuppressMessage("Microsoft.Design", "CA1039")]
Esse formato não é recomendada devido a problemas de manutenibilidade.
Suprimindo mais violações em um corpo do método
Os atributos só podem ser se aplicados a um método e não podem ser inseridas no corpo do método.No entanto, você pode especificar o identificador como a ID de 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:="cmdArgs")> _
Shared Sub Main(ByVal cmdArgs() As String)
End Sub
<System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", _
"CA1806:DoNotIgnoreMethodResults", MessageId:="System.Guid")> _
Shared Function IsValidGuid(ByVal g As String) As Boolean
Try
Dim instance As New Guid(g) 'Causes CA1806: DoNotIgnoreMethodResults
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", "CA1801:ReviewUnusedParameters", MessageId = "args")]
static void Main(string[] args) { }
[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;
}
}
}
using namespace System;
CA_SUPPRESS_MESSAGE("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId="args")
int main(array<System::String ^> ^args)
{
return 0;
}
namespace InSourceSuppression
{
public ref class Class1
{
public:
CA_SUPPRESS_MESSAGE("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", MessageId="System.Uri")
static bool IsValidGuid(String^ uri)
{
try
{
gcnew Uri(uri);
return true;
}
catch (ArgumentNullException^) {}
catch (OverflowException^) {}
catch (FormatException^) {}
return false;
}
};
}
Código gerado
Os compiladores de código gerenciado e algumas ferramentas de terceiros gerenciem o código para facilitar o desenvolvimento rápido de código.o código gerado completo que aparecem nos arquivos de origem é marcado normalmente com o atributo de GeneratedCodeAttribute .
Você pode escolher se deseja suprimir avisos e erros de análise de código para o código gerado.Para obter informações sobre como suprimir esses avisos e erros, consulte Como suprimir avisos de análise do código para código gerenciado.
Observe que a análise de código ignora GeneratedCodeAttribute quando é aplicada a um assembly inteiro ou um único parâmetro.Essas situações raramente ocorrem.
Exclusões de Global- nível
A ferramenta análise de código gerenciado examina os atributos de SuppressMessage que são aplicados ao assembly, módulo, tipo, membro ou nível do parâmetro.Também será acionado violações em recursos e namespaces.Essas violações devem ser aplicadas no nível global e têm escopo e pretendido.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ê suprime um aviso com escopo do namespace, suprime o aviso no namespace próprio.Não suprime o aviso em tipos no namespace. |
Qualquer exclusão pode ser expressada especificando um escopo explícito.Essas exclusões devem viver no nível global.Você não pode especificar a exclusão de membros de nível decorando um tipo.
Exclusões de Global- nível é a única maneira de suprimir as mensagens que fazem referência ao código gerado completo que não é mapeado para a origem explicitamente fornecidas do usuário.Por exemplo, o seguinte código suprime uma violação em um construtor completo emissor:
[module: SuppressMessage("Microsoft.Design", "CA1055:AbstractTypesDoNotHavePublicConstructors", Scope="member", Target="Microsoft.Tools.FxCop.Type..ctor()")]
Observação |
---|
O destino sempre contém o nome totalmente qualificada do item. |
Excluir Arquivo global
O arquivo global de exclusão mantém as exclusões que são exclusões de global- nível ou exclusões que não especificam um destino.Por exemplo, as exclusões para violações no nível de assembly são armazenadas no arquivo.Além disso, algumas exclusões do ASP.NET são armazenadas no arquivo como as configurações de nível de projeto não estão disponíveis para o código atrás de um formulário.Uma exclusão global é criada e adicionada a seu projeto na primeira vez que você seleciona a opção de Na exclusão Arquivo de projeto de comando de Suprimir Mensagem na janela da Lista de erros.Para obter mais informações, consulte Como suprimir avisos usando o item de menu.