Na visão geral de supressão de origem
a exclusão de Em- origem é a capacidade para suprimir ou evitar violações de análise de código em código gerenciado adicionando o atributo de SuppressMessage para segmentos de código que faz com que as violações.O atributo de SuppressMessage é um atributo condicional que está incluído nos metadados do IL do 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 os CA_SUPPRESS_MESSAGE macros ou CA_GLOBAL_SUPPRESS_MESSAGE no arquivo de cabeçalho, para adicionar o atributo.
Você não deve usar exclusões de em- origem em construções de versão para evitar enviar os metadados delete de em- origem acidentalmente.Devido a custo de processamento de exclusão de em- origem, o desempenho de seu aplicativo pode também ser degradado incluindo os metadados delete de em- origem.
Observação |
---|
Você não tem que lidar com a 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 está disponível para o código do 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 Suppress specific mensagens, um atributo de SuppressMessage é adicionado ou em seu código ou 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")
Onde:
Categoria de regra - a categoria em que a regra é definida.Para obter mais informações sobre as categorias da regra de análise de código, consulte Análise de código para avisos do código gerenciado.
Regra a identificação - o identificador de regra.Suporte inclui um nome curto e longo para o identificador de regra.O nome curto é CAXXXX; o nome longo é CAXXXX:FriendlyTypeName.
Justificação - o texto que é usado para documentar a razão para suprimir mensagem.
Identificação de mensagem - identificador exclusivo de um problema para cada mensagem.
Escopo - O destino que o aviso está sendo suprimido.Se o destino não for especificado, é definido para o destino de atributo.Os escopos suportados incluem o seguinte:
Module
Namespace
Recurso
Tipo
Membro
Destino - Um identificador que é usado para especificar o destino que o aviso está sendo suprimido.Deve conter um nome totalmente qualificado do item.
Uso de SuppressMessage
Os avisos de análise de código são suprimidos a nível para que uma instância de atributo de SuppressMessage é aplicada.O objetivo disso é acoplar fortemente informações de exclusão para o código onde a violação ocorre.
O formulário geral de exclusão inclui a categoria de regras e um identificador de regra que contém uma representação legível opcional de nome de regra.Por exemplo,
[SuppressMessage("Microsoft.Design", "CA1039:ListsAreStrongTyped")]
Se houver razões de desempenho restritas para minimizar metadados delete de em- origem, o próprio nome de regra pode ser deixado para fora.A categoria de regras e seu ID da regra constituem juntos suficientemente um identificador exclusivo de regra.Por exemplo,
[SuppressMessage("Microsoft.Design", "CA1039")]
Este formato não é recomendado devido a problemas de sustentabilidade.
Eliminando mais violações em um corpo de método
Atributos podem apenas ser aplicados a um método e não podem ser inseridos no corpo do método.No entanto, você pode especificar o identificador como a identificação 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
Compiladores de código gerenciado e algumas ferramentas de terceiros geram código para tornar o desenvolvimento rápido de código.o código compilador-geradas que aparece nos arquivos de origem é geralmente marcado com o atributo de GeneratedCodeAttribute .
Você pode escolher se suprimir avisos e erros de análise de código para o código gerado.Para obter informações sobre como suprimir e avisos como erros, consulte Como: suprimir avisos de análise de código para código gerado.
Observe que a análise de código ignora GeneratedCodeAttribute quando é aplicado a um conjunto inteiro ou um único parâmetro.Essas situações ocorrem raramente.
Exclui de globais - nível
A ferramenta de análise de código gerenciado examina os atributos de SuppressMessage que são aplicados a assembly, módulo, tipo, membro, ou nível de parâmetro.Também é acionado violações com recursos e namespaces.Essas violações devem ser aplicadas a nível global e são do escopo e destinadas.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 de namespace, suprime o aviso com o espaço próprio.Não suprime o aviso contra tipos no namespace. |
Qualquer excluir pode ser expressa especificando um escopo específico.Essas exclusões devem viver a nível global.Você não pode especificar a exclusão do membro nível adornado um tipo.
Exclusões de globais - nível são a única maneira para eliminar as mensagens que se referem ao código compilador-geradas que não mapeia para a fonte explicitamente fornecida do usuário.Por exemplo, o seguinte código suprime uma violação contra um construtor compilador emitido:
[module: SuppressMessage("Microsoft.Design", "CA1055:AbstractTypesDoNotHavePublicConstructors", Scope="member", Target="Microsoft.Tools.FxCop.Type..ctor()")]
Observação |
---|
O destino sempre contém o nome totalmente qualificado do item. |
Excluir global Arquivo
O arquivo global delete mantém exclusões que são globais - exclusões de nível ou exclui que não especificam um destino.Por exemplo, exclusões para violações de nível de assembly são armazenadas no arquivo.Além disso, algumas exclusões ASP.NET são armazenadas no arquivo porque as configurações de nível de projeto não estão disponíveis para o código do formulário.Uma exclusão global é criada e adicionada ao seu projeto a primeira vez que você selecionar a opção de Na exclusão Arquivo de Projeto de comando de Suppress specific mensagens na janela de error list.Para obter mais informações, consulte Como: suprimir avisos usando o Item de Menu.