Partilhar via


Regras de qualidade do código

A análise de código .NET fornece regras que visam melhorar a qualidade do código. As regras são organizadas em áreas como design, globalização, desempenho e segurança. Certas regras são específicas para o uso da API .NET, enquanto outras são sobre a qualidade do código genérico.

Índice de regras

A tabela a seguir lista as regras de análise de qualidade de código.

ID da regra e aviso Description
CA1000: Não declarar membros estáticos em tipos genéricos Quando um membro estático de um tipo genérico é chamado, o argumento type deve ser especificado para o tipo. Quando um membro de instância genérica que não suporta inferência é chamado, o argumento type deve ser especificado para o membro. Nesses dois casos, a sintaxe para especificar o argumento type é diferente e facilmente confusa.
CA1001: Tipos que possuem campos descartáveis devem ser descartáveis Uma classe declara e implementa um campo de instância que é um tipo System.IDisposable, e a classe não implementa IDisposable. Uma classe que declara um campo IDisposable possui indiretamente um recurso não gerenciado e deve implementar a interface IDisposable.
CA1002: Não exponha listas genéricas System.Collections.Generic.List<(Of <(T>)>) é uma coleção genérica projetada para desempenho, não herança. Portanto, List não contém nenhum membro virtual. Em vez disso, as coleções genéricas projetadas para herança devem ser expostas.
CA1003: Usar instâncias genéricas do manipulador de eventos Um tipo contém um delegado que retorna void, cuja assinatura contém dois parâmetros (o primeiro um objeto e o segundo um tipo que é atribuível a EventArgs), e o assembly contendo destina-se ao Microsoft .NET Framework 2.0.
CA1005: Evite parâmetros excessivos em tipos genéricos Quanto mais parâmetros de tipo um tipo genérico contiver, mais difícil será saber e lembrar o que cada parâmetro de tipo representa. Geralmente é óbvio com um parâmetro de tipo, como na Lista<T>, e em certos casos que têm dois parâmetros de tipo, como no Dicionário<TKey, TValue>. No entanto, se existirem mais de dois parâmetros de tipo, a dificuldade torna-se demasiado grande para a maioria dos utilizadores.
CA1008: Enums deve ter valor zero O valor padrão de uma enumeração não inicializada, assim como outros tipos de valor, é zero. Uma enumeração não atribuída a sinalizadores deve definir um membro usando o valor zero para que o valor padrão seja um valor válido da enumeração. Se uma enumeração que tem o atributo FlagsAttribute aplicado define um membro de valor zero, seu nome deve ser "None" para indicar que nenhum valor foi definido na enumeração.
CA1010: Coleções devem implementar interface genérica Para ampliar a usabilidade de uma coleção, implemente uma das interfaces de coleção genéricas. Em seguida, a coleção pode ser usada para preencher tipos de coleção genéricos.
CA1012: Tipos abstratos não devem ter construtores públicos Construtores em tipos abstratos podem ser chamados apenas por tipos derivados. Como os construtores públicos criam instâncias de um tipo, e você não pode criar instâncias de um tipo abstrato, um tipo abstrato que tem um construtor público é projetado incorretamente.
CA1014: Marcar assemblies com CLSCompliantAttribute A Common Language Specification (CLS) define restrições de nomenclatura, tipos de dados e regras às quais os assemblies devem estar em conformidade se forem usados em linguagens de programação. Um bom design determina que todos os assemblies indiquem explicitamente a conformidade com CLS usando CLSCompliantAttribute . Se esse atributo não estiver presente em um assembly, o assembly não será compatível.
CA1016: Marcar assemblies com AssemblyVersionAttribute O .NET usa o número da versão para identificar exclusivamente um assembly e para vincular a tipos em assemblies fortemente nomeados. O número da versão é usado em conjunto com a política de versão e do editor. Por padrão, os aplicativos são executados apenas com a versão de assembly com a qual foram criados.
CA1017: Marcar assemblies com ComVisibleAttribute ComVisibleAttribute determina como os clientes COM acessam o código gerenciado. Um bom design dita que as montagens indiquem explicitamente a visibilidade COM. A visibilidade COM pode ser definida para todo o conjunto e, em seguida, substituída para tipos individuais e membros do tipo. Se esse atributo não estiver presente, o conteúdo do assembly será visível para clientes COM.
CA1018: Marcar atributos com AttributeUsageAttribute Ao definir um atributo personalizado, marque-o usando AttributeUsageAttribute para indicar onde no código-fonte o atributo personalizado pode ser aplicado. O significado e o uso pretendido de um atributo determinarão seus locais válidos no código.
CA1019: Definir acessadores para argumentos de atributo Os atributos podem definir argumentos obrigatórios que devem ser especificados quando você aplica o atributo a um destino. Estes também são conhecidos como argumentos posicionais porque são fornecidos para atribuir construtores como parâmetros posicionais. Para cada argumento obrigatório, o atributo também deve fornecer uma propriedade somente leitura correspondente para que o valor do argumento possa ser recuperado no momento da execução. Os atributos também podem definir argumentos opcionais, que também são conhecidos como argumentos nomeados. Esses argumentos são fornecidos aos construtores de atributos pelo nome e devem ter uma propriedade de leitura/gravação correspondente.
CA1021: Evite parâmetros Passar tipos por referência (usando out ou ref) requer experiência com ponteiros, compreensão de como os tipos de valor e tipos de referência diferem e manipulação de métodos com vários valores de retorno. Além disso, a diferença entre os parâmetros out e ref não é amplamente compreendida.
CA1024: Use propriedades onde apropriado Um método público ou protegido tem um nome que começa com "Get", não usa parâmetros e retorna um valor que não é uma matriz. O método pode ser um bom candidato para se tornar uma propriedade.
CA1027: Marcar enums com FlagsAttribute Uma enumeração é um tipo de valor que define um conjunto de constantes nomeadas relacionadas. Aplique FlagsAttribute a uma enumeração quando suas constantes nomeadas puderem ser combinadas significativamente.
CA1028: O armazenamento de enum deve ser Int32 Uma enumeração é um tipo de valor que define um conjunto de constantes nomeadas relacionadas. Por padrão, o tipo de dados System.Int32 é usado para armazenar o valor constante. Embora você possa alterar esse tipo subjacente, ele não é necessário ou recomendado para a maioria dos cenários.
CA1030: Use eventos quando apropriado Esta regra deteta métodos que têm nomes que normalmente seriam usados para eventos. Se um método é chamado em resposta a uma alteração de estado claramente definida, o método deve ser invocado por um manipulador de eventos. Os objetos que chamam o método devem gerar eventos em vez de chamar o método diretamente.
CA1031: Não capturar tipos de exceção gerais Não devem ser apanhadas exceções gerais. Pegue uma exceção mais específica ou relance-a como a última instrução no bloco catch.
CA1032: Implementar construtores de exceção padrão A falha em fornecer o conjunto completo de construtores pode dificultar o tratamento correto de exceções.
CA1033: Os métodos de interface devem ser chamáveis por tipos filho Um tipo visível externamente sem lacre fornece uma implementação de método explícito de uma interface pública e não fornece um método alternativo visível externamente que tenha o mesmo nome.
CA1034: Os tipos aninhados não devem estar visíveis Um tipo aninhado é um tipo declarado no escopo de outro tipo. Os tipos aninhados são úteis para encapsular detalhes de implementação privada do tipo que contém. Usados para essa finalidade, os tipos aninhados não devem ser visíveis externamente.
CA1036: Substituir métodos em tipos comparáveis Um tipo público ou protegido implementa a interface System.IComparable. Ele não substitui Object.Equals nem sobrecarrega o operador específico da linguagem para igualdade, desigualdade, menor ou maior que.
CA1040: Evite interfaces vazias As interfaces definem membros que fornecem um comportamento ou contrato de uso. A funcionalidade descrita pela interface pode ser adotada por qualquer tipo, independentemente de onde o tipo aparece na hierarquia de herança. Um tipo implementa uma interface fornecendo implementações para os membros da interface. Uma interface vazia não define nenhum membro; portanto, não define um contrato que possa ser implementado.
CA1041: Fornecer mensagem ObsoleteAttribute Um tipo ou membro é marcado usando um atributo System.ObsoleteAttribute que não tem sua propriedade ObsoleteAttribute.Message especificada. Quando um tipo ou membro marcado usando ObsoleteAttribute é compilado, a propriedade Message do atributo é exibida. Isso dá ao usuário informações sobre o tipo ou membro obsoleto.
CA1043: Use o argumento integral ou string para indexadores Os indexadores (ou seja, propriedades indexadas) devem usar tipos integrais ou de cadeia de caracteres para o índice. Esses tipos são normalmente usados para indexar estruturas de dados e aumentam a usabilidade da biblioteca. O uso do tipo de objeto deve ser restrito aos casos em que a integral específica ou o tipo de cadeia de caracteres não pode ser especificado em tempo de design.
CA1044: As propriedades não devem ser gravadas apenas Embora seja aceitável e muitas vezes necessário ter uma propriedade somente leitura, as diretrizes de design proíbem o uso de propriedades somente gravação. Isso ocorre porque permitir que um usuário defina um valor e, em seguida, impedir que o usuário visualize esse valor, não fornece nenhuma segurança. Além disso, sem acesso de leitura, o estado dos objetos compartilhados não pode ser visualizado, o que limita sua utilidade.
CA1045: Não passar tipos por referência Passar tipos por referência (usando out ou ref) requer experiência com ponteiros, compreensão de como tipos de valor e tipos de referência diferem e manipulação de métodos que têm vários valores de retorno. Os arquitetos de bibliotecas que projetam para um público em geral não devem esperar que os usuários se tornem proficientes em trabalhar com out parâmetros OR ref .
CA1046: Não sobrecarregar operador igual em tipos de referência Para tipos de referência, a implementação padrão do operador de igualdade é quase sempre correta. Por padrão, duas referências são iguais somente se apontarem para o mesmo objeto.
CA1047: Não declare membros protegidos em tipos lacrados Os tipos declaram membros protegidos para que os tipos herdados possam acessar ou substituir o membro. Por definição, os tipos selados não podem ser herdados, o que significa que os métodos protegidos em tipos selados não podem ser chamados.
CA1050: Declarar tipos em namespaces Os tipos são declarados em namespaces para evitar colisões de nomes e como uma maneira de organizar tipos relacionados em uma hierarquia de objetos.
CA1051: Não declarar campos de instância visíveis O uso principal de um campo deve ser como um detalhe de implementação. Os campos devem ser privados ou internos e devem ser expostos usando propriedades.
CA1052: Os tipos de suportes estáticos devem ser selados Um tipo público ou protegido contém apenas membros estáticos e não é declarado usando o modificador selado (C# Reference) (NotInheritable). Um tipo que não se destina a ser herdado deve ser marcado usando o modificador selado para evitar seu uso como um tipo de base.
CA1053: Os tipos de suporte estático não devem ter construtores Um tipo público ou aninhado declara apenas membros estáticos e tem um construtor padrão público ou protegido. O construtor é desnecessário porque chamar membros estáticos não requer uma instância do tipo. A sobrecarga de cadeia de caracteres deve chamar a sobrecarga de identificador de recurso uniforme (URI) usando o argumento string para segurança e proteção.
CA1054: Os parâmetros URI não devem ser cadeias de caracteres Se um método usa uma representação de cadeia de caracteres de um URI, uma sobrecarga correspondente deve ser fornecida que toma uma instância da classe URI, que fornece esses serviços de forma segura e protegida.
CA1055: Os valores de retorno de URI não devem ser cadeias de caracteres Esta regra pressupõe que o método retorna um URI. Uma representação de cadeia de caracteres de um URI é propensa a erros de análise e codificação e pode levar a vulnerabilidades de segurança. A classe System.Uri fornece esses serviços de forma segura.
CA1056: As propriedades de URI não devem ser cadeias de caracteres Esta regra pressupõe que a propriedade representa um URI (Uniform Resource Identifier). Uma representação de cadeia de caracteres de um URI é propensa a erros de análise e codificação e pode levar a vulnerabilidades de segurança. A classe System.Uri fornece esses serviços de forma segura.
CA1058: Os tipos não devem estender certos tipos de base Um tipo visível externamente estende certos tipos de base. Use uma das alternativas.
CA1060: Mover P/Invoca para NativeMethods classe Métodos de invocação de plataforma, como aqueles que são marcados usando o atributo System.Runtime.InteropServices.DllImportAttribute ou métodos que são definidos usando a palavra-chave no Visual Basic, acessam código Declare não gerenciado. Esses métodos devem ser da classe NativeMethods, SafeNativeMethods ou UnsafeNativeMethods.
CA1061: Não ocultar métodos de classe base Um método em um tipo base é oculto por um método nomeado de forma idêntica em um tipo derivado, quando a assinatura de parâmetro do método derivado difere apenas por tipos que são mais fracamente derivados do que os tipos correspondentes na assinatura de parâmetro do método base.
CA1062: Validar argumentos de métodos públicos Todos os argumentos de referência que são passados para métodos visíveis externamente devem ser verificados em relação a null.
CA1063: Implementar IDisposable corretamente Todos os tipos IDisposable devem implementar o padrão Dispose corretamente.
CA1064: As exceções devem ser públicas Uma exceção interna é visível apenas dentro de seu próprio escopo interno. Depois que a exceção estiver fora do escopo interno, somente a exceção de base poderá ser usada para capturar a exceção. Se a exceção interna for herdada de Exception, SystemExceptionou ApplicationException, o código externo não terá informações suficientes para saber o que fazer com a exceção.
CA1065: Não gere exceções em locais inesperados Um método que não se espera que lance exceções lança uma exceção.
CA1066: Implemente o IEquatable ao substituir Igual Um tipo de valor substitui o Equals método, mas não implementa IEquatable<T>o .
CA1067: Substituir igual ao implementar o IEquatable Um tipo implementa , mas não substitui Equals o IEquatable<T>método.
CA1068: Os parâmetros CancellationToken devem vir por último Um método tem um parâmetro CancellationToken que não é o último parâmetro.
CA1069: Enums não devem ter valores duplicados Uma enumeração tem vários membros aos quais é explicitamente atribuído o mesmo valor constante.
CA1070: Não declarar campos de evento como virtuais Um evento semelhante a um campo foi declarado como virtual.
CA1200: Evite usar tags cref com um prefixo O atributo cref em uma tag de documentação XML significa "referência de código". Ele especifica que o texto interno da tag é um elemento de código, como um tipo, método ou propriedade. Evite usar cref tags com prefixos, pois isso impede que o compilador verifique referências. Ele também impede que o ambiente de desenvolvimento integrado (IDE) do Visual Studio encontre e atualize essas referências de símbolo durante refatoração.
CA1303: Não passe literais como parâmetros localizados Um método visível externamente passa uma cadeia de caracteres literal como um parâmetro para um construtor ou método .NET, e essa cadeia de caracteres deve ser localizável.
CA1304: Especificar CultureInfo Um método ou construtor chama um membro que tem uma sobrecarga que aceita um parâmetro System.Globalization.CultureInfo, e o método ou construtor não chama a sobrecarga que usa o parâmetro CultureInfo. Quando um objeto CultureInfo ou System.IFormatProvider não é fornecido, o valor padrão fornecido pelo membro sobrecarregado pode não ter o efeito desejado em todas as localidades.
CA1305: Especificar IFormatProvider Um método ou construtor chama um ou mais membros que têm sobrecargas que aceitam um parâmetro System.IFormatProvider e o método ou construtor não chama a sobrecarga que usa o parâmetro IFormatProvider. Quando um objeto System.Globalization.CultureInfo ou IFormatProvider não é fornecido, o valor padrão fornecido pelo membro sobrecarregado pode não ter o efeito desejado em todas as localidades.
CA1307: Especifique StringComparison para maior clareza Uma operação de comparação de cadeia de caracteres usa uma sobrecarga de método que não define um parâmetro StringComparison .
CA1308: Normalizar cadeias de caracteres para maiúsculas As cadeias de caracteres devem ser normalizadas para maiúsculas. Um pequeno grupo de caracteres não pode fazer uma viagem de ida e volta quando são convertidos em minúsculas.
CA1309: Use ordinal StringComparison Uma operação de comparação de cadeia de caracteres que não é linguística não define o parâmetro StringComparison como Ordinal ou OrdinalIgnoreCase. Ao definir explicitamente o parâmetro como StringComparison.Ordinal ou StringComparison.OrdinalIgnoreCase, seu código geralmente ganha velocidade, torna-se mais correto e mais confiável.
CA1310: Especifique StringComparison para correção Uma operação de comparação de cadeia de caracteres usa uma sobrecarga de método que não define um parâmetro StringComparison e usa a comparação de cadeia de caracteres específica da cultura por padrão.
CA1311: Especificar uma cultura ou usar uma versão invariante Especifique uma cultura ou use uma cultura invariante para evitar a dependência implícita da cultura atual ao chamar ToUpper ou ToLower.
CA1401: P/Invokes não deve estar visível Um método público ou protegido em um tipo público tem o atributo System.Runtime.InteropServices.DllImportAttribute (também implementado pela palavra-chave Declare no Visual Basic). Tais métodos não devem ser expostos.
CA1416: Validar a compatibilidade da plataforma O uso de APIs dependentes de plataforma em um componente faz com que o código não funcione mais em todas as plataformas.
CA1417: Não use OutAttribute em parâmetros de cadeia de caracteres para P/Invokes Os parâmetros de cadeia de caracteres passados pelo valor com o OutAttribute pode desestabilizar o tempo de execução se a cadeia de caracteres for uma cadeia de caracteres internada.
CA1418: Usar cadeia de caracteres de plataforma válida O analisador de compatibilidade de plataforma requer um nome e uma versão válidos da plataforma.
CA1419: Forneça um construtor sem parâmetros que seja tão visível quanto o tipo de contenção para tipos concretos derivados de 'System.Runtime.InteropServices.SafeHandle' Fornecer um construtor sem parâmetros que é tão visível quanto o tipo de contenção para um tipo derivado de permite um melhor desempenho e uso com soluções de System.Runtime.InteropServices.SafeHandle interoperabilidade geradas na fonte.
CA1420: Propriedade, tipo ou atributo requer empacotamento de tempo de execução O uso de recursos que exigem empacotamento de tempo de execução quando o empacotamento de tempo de execução estiver desabilitado resultará em exceções em tempo de execução.
CA1421: Método usa empacotamento de tempo de execução quando DisableRuntimeMarshallingAttribute é aplicado Um método usa empacotamento de tempo de execução, e o empacotamento de tempo de execução é explicitamente desabilitado.
CA1422: Validar compatibilidade de plataforma Não é recomendável chamar uma API obsoleta em um determinado sistema operacional (versão) a partir de um site de chamada acessível a partir desse sistema operacional (versão).
CA1501: Evite herança excessiva Um tipo tem mais de quatro níveis de profundidade em sua hierarquia de herança. Hierarquias de tipo profundamente aninhadas podem ser difíceis de seguir, entender e manter.
CA1502: Evite complexidade excessiva Esta regra mede o número de caminhos linearmente independentes através do método, que é determinado pelo número e complexidade de ramificações condicionais.
CA1505: Evite código insustentável Um tipo ou método tem um baixo valor de índice de manutenção. Um baixo índice de manutenibilidade indica que um tipo ou método é provavelmente difícil de manter e seria um bom candidato para redesenho.
CA1506: Evite acoplamento excessivo de classe Esta regra mede o acoplamento de classes contando o número de referências de tipo exclusivas que um tipo ou método contém.
CA1507: Use nameof no lugar de string Um literal de cadeia de caracteres é usado como um argumento onde uma nameof expressão pode ser usada.
CA1508: Evitar código condicional inativo Um método tem código condicional que sempre é avaliado para true ou false em tempo de execução. Isso leva ao código morto no false ramo da condição.
CA1509: Entrada inválida no arquivo de configuração de métricas de código As regras de métricas de código, como CA1501, CA1502, CA1505 e CA1506, forneceram um arquivo de configuração chamado CodeMetricsConfig.txt que tem uma entrada inválida.
CA1510: Usar o auxiliar de lançamento ArgumentNullException Os auxiliares de lançamento são mais simples e eficientes do que if os blocos que constroem uma nova instância de exceção.
CA1511: Usar o auxiliar de lançamento ArgumentException Os auxiliares de lançamento são mais simples e eficientes do que if os blocos que constroem uma nova instância de exceção.
CA1512: Usar o auxiliar de lançamento ArgumentOutOfRangeException Os auxiliares de lançamento são mais simples e eficientes do que if os blocos que constroem uma nova instância de exceção.
CA1513: Usar o auxiliar de lançamento ObjectDisposedException Os auxiliares de lançamento são mais simples e eficientes do que if os blocos que constroem uma nova instância de exceção.
CA1514: Evitar o argumento de comprimento redundante Um argumento de comprimento redundante é usado ao fatiar até o final de uma cadeia de caracteres ou buffer. Um comprimento calculado pode ser propenso a erros e também é desnecessário.
CA1515: Considere tornar os tipos públicos internos Ao contrário de uma biblioteca de classes, a API de um aplicativo normalmente não é referenciada publicamente, portanto, os tipos podem ser marcados como internos.
CA1700: Não nomeie valores de enum 'Reservado' Esta regra pressupõe que um membro de enumeração que tenha um nome que contenha "reservado" não é usado atualmente, mas é um espaço reservado a ser renomeado ou removido em uma versão futura. Renomear ou remover um membro é uma mudança de quebra.
CA1707: Os identificadores não devem conter sublinhados Por convenção, os nomes dos identificadores não contêm o caractere sublinhado (_). Esta regra verifica namespaces, tipos, membros e parâmetros.
CA1708: Os identificadores devem diferir mais do que maiúsculas e minúsculas Os identificadores para namespaces, tipos, membros e parâmetros não podem diferir apenas por maiúsculas e minúsculas porque as linguagens destinadas ao Common Language Runtime não precisam diferenciar maiúsculas de minúsculas.
CA1710: Os identificadores devem ter o sufixo correto Por convenção, os nomes dos tipos que estendem certos tipos base ou que implementam determinadas interfaces, ou tipos derivados desses tipos, têm um sufixo associado ao tipo base ou interface.
CA1711: Os identificadores não devem ter sufixo incorreto Por convenção, apenas os nomes de tipos que estendem certos tipos base ou que implementam certas interfaces, ou tipos derivados desses tipos, devem terminar com sufixos reservados específicos. Outros nomes de tipo não devem usar esses sufixos reservados.
CA1712: Não prefixar valores de enum com nome de tipo Os nomes dos membros da enumeração não são prefixados usando o nome do tipo porque as ferramentas de desenvolvimento devem fornecer informações de tipo.
CA1713: Os eventos não devem ter antes ou depois do prefixo O nome de um evento começa com "Antes" ou "Depois". Para nomear eventos relacionados que são gerados em uma sequência específica, use o tempo presente ou passado para indicar a posição relativa na sequência de ações.
CA1714: Enums de bandeiras devem ter nomes plurais Uma enumeração pública tem o atributo System.FlagsAttribute e seu nome não termina em "s". Os tipos marcados usando FlagsAttribute têm nomes que são plurais porque o atributo indica que mais de um valor pode ser especificado.
CA1715: Os identificadores devem ter o prefixo correto O nome de uma interface visível externamente não começa com um "I" maiúsculo. O nome de um parâmetro de tipo genérico em um tipo ou método visível externamente não começa com um "T" maiúsculo.
CA1716: Os identificadores não devem corresponder a palavras-chave Um nome de namespace ou um nome de tipo corresponde a uma palavra-chave reservada em uma linguagem de programação. Os identificadores para namespaces e tipos não devem corresponder a palavras-chave definidas por linguagens que visam o Common Language Runtime.
CA1717: Somente enums FlagsAttribute devem ter nomes plurais As convenções de nomenclatura determinam que um nome plural para uma enumeração indica que mais de um valor da enumeração pode ser especificado ao mesmo tempo.
CA1720: Os identificadores não devem conter nomes de tipo O nome de um parâmetro em um membro visível externamente contém um nome de tipo de dados ou o nome de um membro visível externamente contém um nome de tipo de dados específico do idioma.
CA1721: Os nomes de propriedade não devem corresponder aos métodos get O nome de um membro público ou protegido começa com "Get" e corresponde ao nome de uma propriedade pública ou protegida. Os métodos e propriedades "Get" devem ter nomes que distingam claramente sua função.
CA1724: Nomes de tipo não devem corresponder namespaces Os nomes de tipo não devem corresponder aos nomes de namespaces .NET. Violar essa regra pode reduzir a usabilidade da biblioteca.
CA1725: Os nomes dos parâmetros devem corresponder à declaração base A nomenclatura consistente de parâmetros em uma hierarquia de substituição aumenta a usabilidade das substituições de método. Um nome de parâmetro em um método derivado que difere do nome na declaração base pode causar confusão sobre se o método é uma substituição do método base ou uma nova sobrecarga do método.
CA1727: Use PascalCase para espaços reservados nomeados Use PascalCase para espaços reservados nomeados no modelo de mensagem de log.
CA1801: Rever parâmetros não utilizados Uma assinatura de método inclui um parâmetro que não é usado no corpo do método.
CA1802: Use literais quando apropriado Um campo é declarado estático e somente leitura (Shared e ReadOnly no Visual Basic) e é inicializado usando um valor que é computável em tempo de compilação. Como o valor atribuído ao campo de destino é computável em tempo de compilação, altere a declaração para um campo const (Const no Visual Basic) para que o valor seja calculado em tempo de compilação em vez de em tempo de execução.
CA1805: Não inicializar desnecessariamente O tempo de execução do .NET inicializa todos os campos de tipos de referência para seus valores padrão antes de executar o construtor. Na maioria dos casos, inicializar explicitamente um campo com seu valor padrão é redundante, o que aumenta os custos de manutenção e pode prejudicar o desempenho (como com o aumento do tamanho da montagem).
CA1806: Não ignore os resultados do método Um novo objeto é criado, mas nunca usado; ou um método que cria e retorna uma nova cadeia de caracteres é chamado e a nova cadeia de caracteres nunca é usada; ou um método COM ou P/Invoke retorna um HRESULT ou código de erro que nunca é usado.
CA1810: Inicializar campos estáticos do tipo de referência embutidos Quando um tipo declara um construtor estático explícito, o compilador just-in-time (JIT) adiciona uma verificação a cada método estático e construtor de instância do tipo para certificar-se de que o construtor estático foi chamado anteriormente. As verificações estáticas do construtor podem diminuir o desempenho.
CA1812: Evite classes internas não instanciadas Uma instância de um tipo de nível de assembly não é criada por código no assembly.
CA1813: Evite atributos não selados O .NET fornece métodos para recuperar atributos personalizados. Por padrão, esses métodos pesquisam a hierarquia de herança de atributos. A selagem do atributo elimina a pesquisa através da hierarquia de herança e pode melhorar o desempenho.
CA1814: Prefira matrizes irregulares em vez de multidimensionais Uma matriz irregular é uma matriz cujos elementos são matrizes. As matrizes que compõem os elementos podem ser de tamanhos diferentes, levando a menos espaço desperdiçado para alguns conjuntos de dados.
CA1815: Substituir é igual e operador é igual em tipos de valor Para tipos de valor, a implementação herdada de Equals usa a biblioteca Reflection e compara o conteúdo de todos os campos. A reflexão é computacionalmente cara, e comparar todos os campos para a igualdade pode ser desnecessário. Se você espera que os usuários comparem ou classifiquem instâncias, ou usem instâncias como chaves de tabela de hash, seu tipo de valor deve implementar Equals.
CA1816: Ligue para GC. SuppressFinalize corretamente Um método que é uma implementação de Dispose não chama GC. SuppressFinalize; ou um método que não seja uma implementação de Dispose chama GC. SuppressFinalize; ou um método chama GC. SuppressFinalize e passa algo diferente disso (Me no Visual Basic).
CA1819: As propriedades não devem retornar matrizes As matrizes retornadas por propriedades não são protegidas contra gravação, mesmo quando a propriedade é somente leitura. Para manter a matriz inviolável, a propriedade deve retornar uma cópia da matriz. Normalmente, os usuários não entenderão as implicações de desempenho adverso de chamar tal propriedade.
CA1820: Teste para cadeias de caracteres vazias usando o comprimento da cadeia de caracteres Comparar cadeias de caracteres usando a propriedade String.Length ou o método String.IsNullOrEmpty é significativamente mais rápido do que usar Equals.
CA1821: Remover finalizadores vazios Sempre que puder, evite finalizadores devido à sobrecarga de desempenho adicional envolvida no controle da vida útil do objeto. Um finalizador vazio incorre em sobrecarga adicional e não oferece nenhum benefício.
CA1822: Marcar membros como estáticos Os membros que não acessam dados de instância ou métodos de instância de chamada podem ser marcados como estáticos (Compartilhado no Visual Basic). Depois de marcar os métodos como estáticos, o compilador emitirá sites de chamada não virtuais para esses membros. Isso pode proporcionar um ganho de desempenho mensurável para código sensível ao desempenho.
CA1823: Evite campos privados não utilizados Foram detetados campos privados que não parecem ser acessados no assembly.
CA1824: Marcar assemblies com NeutralResourcesLanguageAttribute O atributo NeutralResourcesLanguage informa o gerente de recursos da linguagem que foi usada para exibir os recursos de uma cultura neutra para um assembly. Isso melhora o desempenho de pesquisa para o primeiro recurso que você carrega e pode reduzir seu conjunto de trabalho.
CA1825: Evite alocações de array de comprimento zero A inicialização de uma matriz de comprimento zero leva a uma alocação de memória desnecessária. Em vez disso, use a instância de matriz vazia alocada estaticamente chamando Array.Empty. A alocação de memória é compartilhada em todas as invocações desse método.
CA1826: Use a propriedade em vez do método Linq Enumerable Enumerable O método LINQ foi usado em um tipo que suporta uma propriedade equivalente e mais eficiente.
CA1827: Não use Count/LongCount quando algum pode ser usado Count ou LongCount método onde Any o método seria mais eficiente.
CA1828: Não use CountAsync/LongCountAsync quando AnyAsync pode ser usado CountAsync ou LongCountAsync método onde AnyAsync o método seria mais eficiente.
CA1829: Use a propriedade Length/Count em vez do método Enumerable.Count CountO método LINQ foi usado em um tipo que suporta uma propriedade ou Count equivalente, mais eficienteLength.
CA1830: Prefira sobrecargas de método Append e Insert fortemente tipadas no StringBuilder Append e Insert fornecer sobrecargas para vários tipos além do String. Quando possível, prefira as sobrecargas fortemente tipadas em vez de usar ToString() e a sobrecarga baseada em cadeia de caracteres.
CA1831: Use AsSpan em vez de indexadores baseados em intervalo para cadeia de caracteres quando apropriado Ao usar um indexador de intervalo em uma cadeia de caracteres e atribuir implicitamente o valor ao tipo de caracter ReadOnlySpan<, o método Substring será usado em vez de Slice, que produz uma cópia da parte solicitada da cadeia de caracteres.>
CA1832: Use AsSpan ou AsMemory em vez de indexadores baseados em intervalo para obter a parte ReadOnlySpan ou ReadOnlyMemory de uma matriz Ao usar um indexador de intervalo em uma matriz e atribuir implicitamente o valor a um ReadOnlySpan<T> ou ReadOnlyMemory<T> tipo, o método GetSubArray será usado em vez de Slice, que produz uma cópia da parte solicitada da matriz.
CA1833: Use AsSpan ou AsMemory em vez de indexadores baseados em intervalo para obter a parte Span ou Memory de uma matriz Ao usar um indexador de intervalo em uma matriz e atribuir implicitamente o valor a um Span<T> ou Memory<T> tipo, o método GetSubArray será usado em vez de Slice, que produz uma cópia da parte solicitada da matriz.
CA1834: Use StringBuilder.Append(char) para cadeias de caracteres únicos StringBuilder tem uma Append sobrecarga que toma um char como argumento. Prefira chamar a char sobrecarga por motivos de desempenho.
CA1835: Prefira as sobrecargas baseadas em 'Memória' para 'ReadAsync' e 'WriteAsync' 'Stream' tem uma sobrecarga 'ReadAsync' que usa um 'Memory<Byte>' como o primeiro argumento e uma sobrecarga 'WriteAsync' que usa um 'ReadOnlyMemory<Byte>' como o primeiro argumento. Prefira chamar as sobrecargas baseadas em memória, que são mais eficientes.
CA1836: Prefira IsEmpty quando Count disponível Prefira IsEmpty a propriedade que seja mais eficiente do que Count, LengthCount<TSource>(IEnumerable<TSource>) ou LongCount<TSource>(IEnumerable<TSource>) para determinar se o objeto contém ou não nenhum item.
CA1837: Use Environment.ProcessId em vez de Process.GetCurrentProcess().Id Environment.ProcessId é mais simples e mais rápido do que Process.GetCurrentProcess().Id.
CA1838: Evite StringBuilder parâmetros para P/Invokes O empacotamento de 'StringBuilder' sempre cria uma cópia de buffer nativa, resultando em várias alocações para uma operação de empacotamento.
CA1839: Use Environment.ProcessPath em vez de Process.GetCurrentProcess(). MainModule.FileName Environment.ProcessPath é mais simples e mais rápido do que Process.GetCurrentProcess().MainModule.FileName.
CA1840: Use Environment.CurrentManagedThreadId em vez de Thread.CurrentThread.ManagedThreadId Environment.CurrentManagedThreadId é mais compacto e eficiente do que Thread.CurrentThread.ManagedThreadId.
CA1841: Prefer Dictionary contém métodos Chamar Contains a coleção ou Values muitas vezes pode ser mais caro Keys do que ligar ContainsKey ou ContainsValue no próprio dicionário.
CA1842: Não use 'WhenAll' com uma única tarefa Usar WhenAll com uma única tarefa pode resultar em perda de desempenho. Aguarde ou retorne a tarefa.
CA1843: Não use 'WaitAll' com uma única tarefa Usar WaitAll com uma única tarefa pode resultar em perda de desempenho. Aguarde ou retorne a tarefa.
CA1844: Fornecer substituições baseadas em memória de métodos assíncronos ao subclassificar 'Stream' Para melhorar o desempenho, substitua os métodos assíncronos baseados em memória ao subclassificar 'Stream'. Em seguida, implemente os métodos baseados em matriz em termos de métodos baseados em memória.
CA1845: Use a cadeia de caracteres baseada em span. Concat» É mais eficiente para usar AsSpan e string.Concat, em vez de e um operador de Substring concatenação.
CA1846: Prefira AsSpan mais Substring AsSpan é mais eficiente do que Substring. Substring executa uma cópia de cadeia de caracteres O(n), enquanto AsSpan não e tem um custo constante. AsSpan também não executa nenhuma alocação de heap.
CA1847: Use literal de caracteres para uma pesquisa de um único caractere Use String.Contains(char) em vez de String.Contains(string) ao procurar um único caractere.
CA1848: Usar os delegados LoggerMessage Para melhorar o desempenho, use os LoggerMessage delegados.
CA1849: Chamar métodos assíncronos quando em um método assíncrono Em um método que já é assíncrono, as chamadas para outros métodos devem ser para suas versões assíncronas, quando existirem.
CA1850: Prefira o método estático HashData em vez do ComputeHash É mais eficiente usar o método estático HashData em vez de criar e gerenciar uma HashAlgorithm instância para chamar ComputeHash.
CA1851: Possíveis enumerações múltiplas de IEnumerable coleção Possíveis enumerações múltiplas de IEnumerable coleção. Considere o uso de uma implementação que evite várias enumerações.
CA1852: Tipos internos de vedação Um tipo que não é acessível fora de sua montagem e não tem subtipos dentro de sua montagem de contenção não é lacrado.
CA1853: Chamada desnecessária para 'Dictionary.ContainsKey(key)' Não há necessidade de se proteger Dictionary.Remove(key) com Dictionary.ContainsKey(key). Dictionary<TKey,TValue>.Remove(TKey) já verifica se a chave existe e não lança se não existir.
CA1854: Prefira o método 'IDictionary.TryGetValue(TKey, out TValue)' Prefira 'TryGetValue' em vez de um acesso ao indexador de dicionário protegido por uma verificação 'ContainsKey'. 'ContainsKey' e o indexador procuram a chave, portanto, usar 'TryGetValue' evita a pesquisa extra.
CA1855: Use o Span<T>. Clear() em vez de Span<T>. Preenchimento() É mais eficiente chamar Span<T>.Clear() do que chamar Span<T>.Fill(T) para preencher os elementos da extensão com um valor padrão.
CA1856: Uso incorreto do atributo ConstantExpected O ConstantExpectedAttribute atributo não é aplicado corretamente em um parâmetro.
CA1857: O parâmetro espera uma constante para um desempenho ideal Um argumento inválido é passado para um parâmetro anotado com ConstantExpectedAttribute.
CA1858: Use StartsWith em vez de IndexOf É mais eficiente chamar String.StartsWith do que chamar String.IndexOf para verificar se uma cadeia de caracteres começa com um determinado prefixo.
CA1859: Use tipos de concreto quando possível para melhorar o desempenho O código usa tipos de interface ou tipos abstratos, levando a chamadas de interface desnecessárias ou chamadas virtuais.
CA1860: Evite usar o método de extensão 'Enumerable.Any()' É mais eficiente e claro usar Length, Countou IsEmpty (se possível) do que chamar Enumerable.Any para determinar se um tipo de coleção tem algum elemento.
CA1861: Evite matrizes constantes como argumentos Matrizes constantes passadas como argumentos não são reutilizadas, o que implica uma sobrecarga de desempenho. Considere extraí-los para campos "somente leitura estática" para melhorar o desempenho.
CA1862: Use as sobrecargas do método 'StringComparison' para executar comparações de cadeia de caracteres que não diferenciam maiúsculas de minúsculas Quando o código chama ToLower() ou ToUpper() para executar uma comparação de cadeia de caracteres que não diferencia maiúsculas de minúsculas, uma alocação desnecessária é executada.
CA1863: Use 'CompositeFormat' Para reduzir o custo de formatação, armazene em cache e use uma CompositeFormat instância como argumento para String.Format ou StringBuilder.AppendFormat.
CA1864: Prefira o método 'IDictionary.TryAdd(TKey, TValue)' Ambos Dictionary<TKey,TValue>.ContainsKey(TKey) e Dictionary<TKey,TValue>.Add realizar uma pesquisa, que é redundante. É mais eficiente chamar Dictionary<TKey,TValue>.TryAdd, que retorna uma bool indicação se o valor foi adicionado ou não. TryAdd não substitui o valor da chave se ela já estiver presente.
CA1865-CA1867: Usar sobrecarga de caracteres A sobrecarga char é uma sobrecarga de melhor desempenho para uma string com um único char.
CA1868: Chamada desnecessária para 'Contém' para conjuntos Ambos ISet<T>.Add(T) e ICollection<T>.Remove(T) realizar uma pesquisa, o que torna redundante ligar ICollection<T>.Contains(T) antecipadamente. É mais eficiente chamar Add(T) ou Remove(T) diretamente, o que retorna um valor booleano indicando se o item foi adicionado ou removido.
CA1869: Armazenar em cache e reutilizar instâncias 'JsonSerializerOptions' Usar uma instância local de JsonSerializerOptions para serialização ou desserialização pode degradar substancialmente o desempenho do seu aplicativo se o código for executado várias vezes, já que System.Text.Json armazena internamente em cache metadados relacionados à serialização na instância fornecida.
CA1870: Usar uma instância 'SearchValues' armazenada em cache Usar uma instância armazenada em SearchValues<T> cache é mais eficiente do que passar valores para 'IndexOfAny' ou 'ContainsAny' diretamente.
CA1871: Não passe uma struct anulável para 'ArgumentNullException.ThrowIfNull' 'ArgumentNullException.ThrowIfNull' aceita um 'objeto', portanto, passar uma struct anulável pode fazer com que o valor seja encaixotado.
CA1872: Prefira 'Convert.ToHexString' e 'Convert.ToHexStringLower' em vez de cadeias de chamadas baseadas em 'BitConverter.ToString' Use Convert.ToHexString ou Convert.ToHexStringLower ao codificar bytes para uma representação de cadeia de caracteres hexadecimal. Esses métodos são mais eficientes e fáceis de alocação do que usar BitConverter.ToString em combinação com String.Replace para substituir traços e String.ToLower.
CA2000: Descarte objetos antes de perder o escopo Como pode ocorrer um evento excecional que impedirá a execução do finalizador de um objeto, o objeto deve ser explicitamente descartado antes que todas as referências a ele estejam fora do escopo.
CA2002: Não bloqueie objetos com identidade fraca Diz-se que um objeto tem uma identidade fraca quando pode ser acessado diretamente através dos limites do domínio do aplicativo. Um thread que tenta adquirir um bloqueio em um objeto que tem uma identidade fraca pode ser bloqueado por um segundo thread em um domínio de aplicativo diferente que tenha um bloqueio no mesmo objeto.
CA2007: Não aguarde diretamente uma tarefa Um método assíncrono aguarda um Task diretamente. Quando um método assíncrono aguarda um Task diretamente, a continuação ocorre no mesmo thread que criou a tarefa. Esse comportamento pode ser caro em termos de desempenho e pode resultar em um impasse no thread da interface do usuário. Considere ligar Task.ConfigureAwait(Boolean) para sinalizar sua intenção de continuação.
CA2008: Não crie tarefas sem passar por um TaskScheduler Uma operação de criação ou continuação de tarefas usa uma sobrecarga de método que não especifica um TaskScheduler parâmetro.
CA2009: Não chamar ToImmutableCollection em um valor ImmutableCollection ToImmutable método foi desnecessariamente chamado em uma coleção imutável de System.Collections.Immutable namespace.
CA2011: Não atribuir propriedade dentro de seu setter Uma propriedade foi acidentalmente atribuída um valor dentro de seu próprio acessador de conjunto.
CA2012: Usar ValueTasks corretamente ValueTasks retornados de invocações de membro destinam-se a ser aguardados diretamente. Tentativas de consumir um ValueTask várias vezes ou acessar diretamente o resultado antes que ele seja conhecido como concluído podem resultar em uma exceção ou corrupção. Ignorar tal ValueTask é provavelmente uma indicação de um bug funcional e pode degradar o desempenho.
CA2013: Não use ReferenceEquals com tipos de valor Ao comparar valores usando System.Object.ReferenceEquals, se objA e objB são tipos de valor, eles são encaixotados antes de serem passados para o ReferenceEquals método. Isso significa que, mesmo que objA e objB representem a mesma instância de um tipo de valor, o ReferenceEquals método retorna false.
CA2014: Não use stackalloc em loops. O espaço de pilha alocado por um stackalloc só é liberado no final da invocação do método atual. Usá-lo em um loop pode resultar em crescimento ilimitado da pilha e eventuais condições de estouro da pilha.
CA2015: Não defina finalizadores para tipos derivados do MemoryManager<T> Adicionar um finalizador a um tipo derivado de pode permitir que a memória seja liberada MemoryManager<T> enquanto ainda está em uso por um Span<T>.
CA2016: Encaminhar o parâmetro CancellationToken para métodos que usam um Encaminhe o CancellationToken parâmetro para métodos que usam um para garantir que as notificações de cancelamento de operação sejam propagadas corretamente ou passe CancellationToken.None explicitamente para indicar intencionalmente não propagar o token.
CA2017: Incompatibilidade de contagem de parâmetros O número de parâmetros fornecidos no modelo de mensagem de log não corresponde ao número de espaços reservados nomeados.
CA2018: O count argumento deve Buffer.BlockCopy especificar o número de bytes a serem copiados Ao usar Buffer.BlockCopyo , o count argumento especifica o número de bytes a serem copiados. Você só deve usar Array.Length para o count argumento em matrizes cujos elementos são exatamente um byte de tamanho. byte, sbytee bool as matrizes têm elementos com um byte de tamanho.
CA2019: ThreadStatic os campos não devem usar inicialização embutida Um campo anotado com ThreadStaticAttribute é inicializado embutido ou explicitamente em um static construtor (Shared no Visual Basic).
CA2020: Prevenir mudanças comportamentais causadas por operadores integrados de IntPtr/UIntPtr Alguns operadores internos adicionados no .NET 7 se comportam de forma diferente dos operadores definidos pelo usuário no .NET 6 e versões anteriores. Alguns operadores que costumavam lançar em contexto não verificado enquanto transbordava não lançam mais, a menos que envolvidos dentro do contexto verificado. Alguns operadores que antes não jogavam no contexto verificado agora lançam, a menos que embrulhados dentro do contexto não verificado.
CA2021: Não chame Enumerable.Cast<T> ou Enumerable.OfType<T> com tipos incompatíveis Uma chamada para Enumerable.Cast<TResult>(IEnumerable) ou Enumerable.OfType<TResult>(IEnumerable) especifica um parâmetro type que é incompatível com o tipo da coleção de entrada.
CA2100: Revisar consultas SQL em busca de vulnerabilidades de segurança Um método define a propriedade System.Data.IDbCommand.CommandText usando uma cadeia de caracteres que é criada a partir de um argumento de cadeia de caracteres para o método. Esta regra pressupõe que o argumento string contém entrada do usuário. Uma cadeia de caracteres de comando SQL criada a partir da entrada do usuário é vulnerável a ataques de injeção de SQL.
CA2101: Especificar empacotamento para argumentos de cadeia de caracteres P/Invoke Um membro de invocação de plataforma permite chamadores parcialmente confiáveis, tem um parâmetro string e não empacota explicitamente a string. Isso pode causar uma vulnerabilidade de segurança potencial.
CA2109: Revisar manipuladores de eventos visíveis Foi detetado um método de manipulação de eventos público ou protegido. Os métodos de manipulação de eventos não devem ser expostos, a menos que seja absolutamente necessário.
CA2119: Métodos de vedação que satisfazem interfaces privadas Um tipo público hereditário fornece uma implementação de método substituível de uma interface interna (Friend no Visual Basic). Para corrigir uma violação dessa regra, impeça que o método seja substituído fora do assembly.
CA2153: Evite lidar com exceções de estado corrompido Exceções de estado corrompidas (CSEs) indicam que existe corrupção de memória em seu processo. Detetá-los em vez de permitir que o processo falhe pode levar a vulnerabilidades de segurança se um invasor puder colocar uma exploração na região de memória corrompida.
CA2200: Relançar para preservar os detalhes da pilha Uma exceção é relançada e a exceção é explicitamente especificada na instrução throw. Se uma exceção for relançada especificando a exceção na instrução throw, a lista de chamadas de método entre o método original que lançou a exceção e o método atual será perdida.
CA2201: Não gerar tipos de exceção reservados Isso torna o erro original difícil de detetar e depurar.
CA2207: Inicializar campos estáticos de tipo de valor embutidos Um tipo de valor declara um construtor estático explícito. Para corrigir uma violação dessa regra, inicialize todos os dados estáticos quando eles forem declarados e remova o construtor estático.
CA2208: Instanciar exceções de argumento corretamente Uma chamada é feita para o construtor padrão (sem parâmetros) de um tipo de exceção que é ou deriva de , ou um argumento de cadeia de ArgumentExceptioncaracteres incorreto é passado para um construtor parametrizado de um tipo de exceção que é ou deriva de ArgumentException.
CA2211: Campos não constantes não devem ser visíveis Os campos estáticos que não são constantes nem somente leitura não são thread-safe. O acesso a esse campo deve ser cuidadosamente controlado e requer técnicas avançadas de programação para sincronizar o acesso ao objeto de classe.
CA2213: Os campos descartáveis devem ser eliminados Um tipo que implementa System.IDisposable declara campos que são de tipos que também implementam IDisposable. O método Dispose do campo não é chamado pelo método Dispose do tipo declarante.
CA2214: Não chamar métodos substituíveis em construtores Quando um construtor chama um método virtual, o construtor para a instância que invoca o método pode não ter executado.
CA2215: Os métodos de descarte devem chamar a classe base dispose Se um tipo herda de um tipo descartável, ele deve chamar o método Dispose do tipo base de seu próprio método Dispose.
CA2216: Tipos descartáveis devem declarar finalizador Um tipo que implementa System.IDisposable e tem campos que sugerem o uso de recursos não gerenciados não implementa um finalizador, conforme descrito por Object.Finalize.
CA2217: Não marcar enums com FlagsAttribute Uma enumeração visível externamente é marcada usando FlagsAttribute, e tem um ou mais valores que não são potências de dois ou uma combinação dos outros valores definidos na enumeração.
CA2218: Substituir GetHashCode ao substituir Equals Um tipo público substitui, System.Object.Equals mas não substitui System.Object.GetHashCode.
CA2219: Não levante exceções em cláusulas de exceção Quando uma exceção é gerada em uma cláusula final ou de falha, a nova exceção oculta a exceção ativa. Quando uma exceção é gerada em uma cláusula de filtro, o tempo de execução captura silenciosamente a exceção. Isso torna o erro original difícil de detetar e depurar.
CA2224: Substituição é igual a sobrecarga do operador Um tipo público implementa o operador de igualdade, mas não substitui System.Object.Equals.
CA2225: As sobrecargas do operador nomearam suplentes Uma sobrecarga do operador foi detetada e o método alternativo nomeado esperado não foi encontrado. O membro alternativo nomeado fornece acesso à mesma funcionalidade que o operador e é fornecido para desenvolvedores que programam em idiomas que não suportam operadores sobrecarregados.
CA2226: Os operadores devem ter sobrecargas simétricas Um tipo implementa o operador de igualdade ou desigualdade e não implementa o operador oposto.
CA2227: As propriedades da coleção devem ser somente leitura Uma propriedade de coleção gravável permite que um usuário substitua a coleção por uma coleção diferente. Uma propriedade somente leitura impede que a coleção seja substituída, mas ainda permite que os membros individuais sejam definidos.
CA2229: Implementar construtores de serialização Para corrigir uma violação dessa regra, implemente o construtor de serialização. Para uma classe selada, torne o construtor privado; caso contrário, torne-o protegido.
CA2231: Operador de sobrecarga é igual ao substituir ValueType.Equals Um tipo de valor substitui Object.Equals, mas não implementa o operador de igualdade.
CA2234: Passar objetos System.Uri em vez de cadeias de caracteres Uma chamada é feita para um método que tem um parâmetro string cujo nome contém "uri", "URI", "urn", "URN", "url" ou "URL". O tipo de declaração do método contém uma sobrecarga de método correspondente que tem um parâmetro System.Uri.
CA2235: Marcar todos os campos não serializáveis Um campo de instância de um tipo que não é serializável é declarado em um tipo que é serializável.
CA2237: Marcar tipos ISerializable com SerializableAttribute Para ser reconhecido pelo common language runtime como serializável, os tipos devem ser marcados usando o atributo SerializableAttribute mesmo quando o tipo usa uma rotina de serialização personalizada por meio da implementação da interface ISerializable.
CA2241: Fornecer argumentos corretos para métodos de formatação O argumento format que é passado para System.String.Format não contém um item de formato que corresponde a cada argumento de objeto, ou vice-versa.
CA2242: Teste para NaN corretamente Esta expressão testa um valor em relação a Single.Nan ou Double.Nan. Use Single.IsNan(Single) ou Double.IsNan(Double) para testar o valor.
CA2243: Literais de cadeia de caracteres de atributo devem analisar corretamente O parâmetro literal de cadeia de caracteres de um atributo não analisa corretamente para uma URL, um GUID ou uma versão.
CA2244: Não duplicar inicializações de elementos indexados Um inicializador de objeto tem mais de um inicializador de elemento indexado com o mesmo índice constante. Todos, exceto o último inicializador, são redundantes.
CA2245: Não atribua uma propriedade a si mesmo Um imóvel foi acidentalmente cedido a si mesmo.
CA2246: Não atribua um símbolo e seu membro na mesma instrução Não é recomendável atribuir um símbolo e seu membro, ou seja, um campo ou uma propriedade, na mesma instrução. Não está claro se o acesso do membro foi destinado a usar o valor antigo do símbolo antes da atribuição ou o novo valor da atribuição nesta declaração.
CA2247: O argumento passado para o construtor TaskCompletionSource deve ser enum TaskCreationOptions em vez de enum TaskContinuationOptions. TaskCompletionSource tem construtores que usam TaskCreationOptions que controlam a Task subjacente e construtores que usam o estado do objeto armazenado na tarefa. Passar acidentalmente um TaskContinuationOptions em vez de um TaskCreationOptions resultará na chamada tratando as opções como estado.
CA2248: Forneça o argumento enum correto para Enum.HasFlag O tipo enum passado como um argumento para a chamada de HasFlag método é diferente do tipo enum chamador.
CA2249: Considere usar String.Contains em vez de String.IndexOf As chamadas para string.IndexOf onde o resultado é usado para verificar a presença/ausência de uma substring podem ser substituídas por string.Contains.
CA2250: Utilização ThrowIfCancellationRequested ThrowIfCancellationRequested verifica automaticamente se o token foi cancelado e lança um OperationCanceledException se foi.
CA2251: Use String.Equals mais String.Compare É mais claro e provavelmente mais rápido de usar String.Equals em vez de comparar o resultado de String.Compare zero.
CA2252: Opte por visualizar recursos Opte por visualizar recursos antes de usar APIs de visualização.
CA2253: Os espaços reservados nomeados não devem ser valores numéricos Os espaços reservados nomeados no modelo de mensagem de registo não devem ser compostos apenas por carateres numéricos.
CA2254: O modelo deve ser uma expressão estática O modelo de mensagem de registro não deve variar entre chamadas.
CA2255: O ModuleInitializer atributo não deve ser usado em bibliotecas Os inicializadores de módulo destinam-se a ser usados pelo código do aplicativo para garantir que os componentes de um aplicativo sejam inicializados antes que o código do aplicativo comece a ser executado.
CA2256: Todos os membros declarados em interfaces pai devem ter uma implementação em uma interface atribuída a DynamicInterfaceCastableImplementation. Os tipos atribuídos atuam DynamicInterfaceCastableImplementationAttribute como uma implementação de interface para um tipo que implementa o IDynamicInterfaceCastable tipo. Como resultado, ele deve fornecer uma implementação de todos os membros definidos nas interfaces herdadas, porque o tipo que implementa IDynamicInterfaceCastable não irá fornecê-los de outra forma.
CA2257: Membros definidos em uma interface com 'DynamicInterfaceCastableImplementationAttribute' devem ser 'estáticos' Como um tipo que implementa pode não implementar uma interface dinâmica em metadados, as chamadas para um membro da interface de IDynamicInterfaceCastable instância que não é uma implementação explícita definida nesse tipo provavelmente falharão em tempo de execução. Marque novos membros static da interface para evitar erros em tempo de execução.
CA2258: Não há suporte para fornecer uma interface 'DynamicInterfaceCastableImplementation' no Visual Basic Fornecer uma interface funcional DynamicInterfaceCastableImplementationAttributeatribuída requer o recurso Membros da Interface Padrão, que não é suportado no Visual Basic.
CA2259: Certifique-se de ThreadStatic que só é usado com campos estáticos ThreadStaticAttribute afeta static apenas (Shared no Visual Basic) campos. Quando aplicado a campos de instância, o atributo não tem impacto no comportamento.
CA2260: Implementar interfaces matemáticas genéricas corretamente Interfaces matemáticas genéricas exigem que o próprio tipo derivado seja usado para o parâmetro de tipo auto-recorrente.
CA2261: Não utilizar ConfigureAwaitOptions.SuppressThrowing com Task<TResult> A ConfigureAwaitOptions.SuppressThrowing opção não é suportada pelo genéricoTask<TResult>, uma vez que isso pode levar à devolução de um arquivo .TResult
CA2262: Definir MaxResponseHeadersLength corretamente Verifique se o MaxResponseHeadersLength valor é fornecido corretamente. Este valor é medido em kilobytes.
CA2263: Prefira sobrecarga genérica quando o tipo é conhecido Usar uma sobrecarga genérica é preferível a passar um System.Type argumento quando o tipo é conhecido, porque eles promovem um código mais limpo e seguro para o tipo com verificações de tempo de compilação aprimoradas.
CA2264: Não passe um valor não anulável para 'ArgumentNullException.ThrowIfNull' 'ArgumentNullException.ThrowIfNull' é lançado quando o argumento passado é 'null'. Certas construções, como structs não anuláveis e expressões 'nameof()' e 'new' são conhecidas por nunca serem nulas, então 'ArgumentNullException.ThrowIfNull' nunca será lançado.
CA2300: Não use o desserializador inseguro BinaryFormatter Desserializadores inseguros são vulneráveis ao desserializar dados não confiáveis. Um invasor pode modificar os dados serializados para incluir tipos inesperados para injetar objetos com efeitos colaterais mal-intencionados.
CA2301: Não chame BinaryFormatter.Deserialize sem primeiro definir BinaryFormatter.Binder Desserializadores inseguros são vulneráveis ao desserializar dados não confiáveis. Um invasor pode modificar os dados serializados para incluir tipos inesperados para injetar objetos com efeitos colaterais mal-intencionados.
CA2302: Verifique se BinaryFormatter.Binder está definido antes de chamar BinaryFormatter.Deserialize Desserializadores inseguros são vulneráveis ao desserializar dados não confiáveis. Um invasor pode modificar os dados serializados para incluir tipos inesperados para injetar objetos com efeitos colaterais mal-intencionados.
CA2305: Não use o desserializador inseguro LosFormatter Desserializadores inseguros são vulneráveis ao desserializar dados não confiáveis. Um invasor pode modificar os dados serializados para incluir tipos inesperados para injetar objetos com efeitos colaterais mal-intencionados.
CA2310: Não use o desserializador inseguro NetDataContractSerializer Desserializadores inseguros são vulneráveis ao desserializar dados não confiáveis. Um invasor pode modificar os dados serializados para incluir tipos inesperados para injetar objetos com efeitos colaterais mal-intencionados.
CA2311: Não desserialize sem primeiro definir NetDataContractSerializer.Binder Desserializadores inseguros são vulneráveis ao desserializar dados não confiáveis. Um invasor pode modificar os dados serializados para incluir tipos inesperados para injetar objetos com efeitos colaterais mal-intencionados.
CA2312: Verifique se NetDataContractSerializer.Binder está definido antes de desserializar Desserializadores inseguros são vulneráveis ao desserializar dados não confiáveis. Um invasor pode modificar os dados serializados para incluir tipos inesperados para injetar objetos com efeitos colaterais mal-intencionados.
CA2315: Não use o desserializador inseguro ObjectStateFormatter Desserializadores inseguros são vulneráveis ao desserializar dados não confiáveis. Um invasor pode modificar os dados serializados para incluir tipos inesperados para injetar objetos com efeitos colaterais mal-intencionados.
CA2321: Não desserializar com JavaScriptSerializer usando um SimpleTypeResolver Desserializadores inseguros são vulneráveis ao desserializar dados não confiáveis. Um invasor pode modificar os dados serializados para incluir tipos inesperados para injetar objetos com efeitos colaterais mal-intencionados.
CA2322: Verifique se JavaScriptSerializer não é inicializado com SimpleTypeResolver antes de desserializar Desserializadores inseguros são vulneráveis ao desserializar dados não confiáveis. Um invasor pode modificar os dados serializados para incluir tipos inesperados para injetar objetos com efeitos colaterais mal-intencionados.
CA2326: Não use valores TypeNameHandling diferentes de Nenhum Desserializadores inseguros são vulneráveis ao desserializar dados não confiáveis. Um invasor pode modificar os dados serializados para incluir tipos inesperados para injetar objetos com efeitos colaterais mal-intencionados.
CA2327: Não use JsonSerializerSettings inseguro Desserializadores inseguros são vulneráveis ao desserializar dados não confiáveis. Um invasor pode modificar os dados serializados para incluir tipos inesperados para injetar objetos com efeitos colaterais mal-intencionados.
CA2328: Verifique se JsonSerializerSettings é seguro Desserializadores inseguros são vulneráveis ao desserializar dados não confiáveis. Um invasor pode modificar os dados serializados para incluir tipos inesperados para injetar objetos com efeitos colaterais mal-intencionados.
CA2329: Não desserializar com JsonSerializer usando uma configuração insegura Desserializadores inseguros são vulneráveis ao desserializar dados não confiáveis. Um invasor pode modificar os dados serializados para incluir tipos inesperados para injetar objetos com efeitos colaterais mal-intencionados.
CA2330: Certifique-se de que JsonSerializer tenha uma configuração segura ao desserializar Desserializadores inseguros são vulneráveis ao desserializar dados não confiáveis. Um invasor pode modificar os dados serializados para incluir tipos inesperados para injetar objetos com efeitos colaterais mal-intencionados.
CA2350: Verifique se a entrada de DataTable.ReadXml() é confiável Ao desserializar uma DataTable entrada não confiável, um invasor pode criar uma entrada mal-intencionada para executar um ataque de negação de serviço. Pode haver vulnerabilidades desconhecidas de execução remota de código.
CA2351: Verifique se a entrada de DataSet.ReadXml() é confiável Ao desserializar uma DataSet entrada não confiável, um invasor pode criar uma entrada mal-intencionada para executar um ataque de negação de serviço. Pode haver vulnerabilidades desconhecidas de execução remota de código.
CA2352: DataSet ou DataTable não seguros em tipo serializável podem ser vulneráveis a ataques de execução remota de código Uma classe ou struct marcada com SerializableAttribute contém um DataSet campo ou DataTable propriedade e não tem um GeneratedCodeAttributearquivo .
CA2353: DataSet ou DataTable não seguro no tipo serializável Uma classe ou struct marcada com um atributo de serialização XML ou um atributo de contrato de dados contém um DataSet campo ou DataTable propriedade.
CA2354: DataSet ou DataTable não seguros no gráfico de objetos desserializados podem ser vulneráveis a ataques de execução remota de código Desserialização com um System.Runtime.Serialization.IFormatter serializado, e o gráfico de objeto do tipo transmitido pode incluir um DataSet ou DataTable.
CA2355: DataSet ou DataTable não seguro no gráfico de objeto desserializado Desserialização quando o gráfico de objeto do tipo transmitido ou especificado pode incluir um DataSet ou DataTable.
CA2356: DataSet ou DataTable não seguro no gráfico de objeto desserializado da Web Um método com um System.Web.Services.WebMethodAttribute ou System.ServiceModel.OperationContractAttribute tem um parâmetro que pode fazer referência a ou DataSetDataTable.
CA2361: Verifique se a classe gerada automaticamente que contém DataSet.ReadXml() não é usada com dados não confiáveis Ao desserializar uma DataSet entrada não confiável, um invasor pode criar uma entrada mal-intencionada para executar um ataque de negação de serviço. Pode haver vulnerabilidades desconhecidas de execução remota de código.
CA2362: DataSet ou DataTable não seguros no tipo serializável gerado automaticamente podem ser vulneráveis a ataques de execução remota de código Ao desserializar entradas não confiáveis com BinaryFormatter e o gráfico de objeto desserializado contém um DataSet ou DataTable, um invasor pode criar uma carga mal-intencionada para executar um ataque de execução remota de código.
CA3001: Revisar o código para vulnerabilidades de injeção de SQL Ao trabalhar com entrada não confiável e comandos SQL, esteja atento aos ataques de injeção de SQL. Um ataque de injeção de SQL pode executar comandos SQL mal-intencionados, comprometendo a segurança e a integridade do seu aplicativo.
CA3002: Revisar o código para vulnerabilidades de XSS Ao trabalhar com entradas não confiáveis de solicitações da Web, esteja atento aos ataques de script entre sites (XSS). Um ataque XSS injeta entrada não confiável na saída HTML bruta, permitindo que o invasor execute scripts mal-intencionados ou modifique maliciosamente o conteúdo em sua página da Web.
CA3003: Revise o código para vulnerabilidades de injeção de caminho de arquivo Ao trabalhar com entradas não confiáveis de solicitações da Web, esteja atento ao uso de entradas controladas pelo usuário ao especificar caminhos para arquivos.
CA3004: Revisar o código para vulnerabilidades de divulgação de informações A divulgação de informações de exceção dá aos invasores informações sobre os internos do seu aplicativo, o que pode ajudar os invasores a encontrar outras vulnerabilidades para explorar.
CA3005: Revise o código para vulnerabilidades de injeção de LDAP Ao trabalhar com entradas não confiáveis, esteja atento aos ataques de injeção do protocolo LDAP. Um invasor pode potencialmente executar instruções LDAP maliciosas em diretórios de informações. Os aplicativos que usam a entrada do usuário para construir instruções LDAP dinâmicas para acessar serviços de diretório são particularmente vulneráveis.
CA3006: Revise o código para vulnerabilidades de injeção de comando de processo Ao trabalhar com informações não confiáveis, esteja atento aos ataques de injeção de comando. Um ataque de injeção de comando pode executar comandos maliciosos no sistema operacional subjacente, comprometendo a segurança e a integridade do seu servidor.
CA3007: Revisar o código para vulnerabilidades de redirecionamento aberto Ao trabalhar com informações não confiáveis, esteja atento às vulnerabilidades de redirecionamento abertas. Um invasor pode explorar uma vulnerabilidade de redirecionamento aberta para usar seu site para dar a aparência de um URL legítimo, mas redirecionar um visitante desavisado para um phishing ou outra página da Web mal-intencionada.
CA3008: Revisar o código para vulnerabilidades de injeção XPath Ao trabalhar com entradas não confiáveis, esteja atento aos ataques de injeção XPath. A construção de consultas XPath usando entrada não confiável pode permitir que um invasor manipule maliciosamente a consulta para retornar um resultado não intencional e, possivelmente, divulgue o conteúdo do XML consultado.
CA3009: Revisar o código para vulnerabilidades de injeção de XML Ao trabalhar com entradas não confiáveis, esteja atento aos ataques de injeção de XML.
CA3010: Revisar o código para vulnerabilidades de injeção de XAML Ao trabalhar com entradas não confiáveis, esteja atento aos ataques de injeção de XAML. XAML é uma linguagem de marcação que representa diretamente a instanciação e a execução de objetos. Isso significa que os elementos criados em XAML podem interagir com recursos do sistema (por exemplo, acesso à rede e E/S do sistema de arquivos).
CA3011: Revise o código para vulnerabilidades de injeção de DLL Ao trabalhar com entradas não confiáveis, esteja atento ao carregamento de código não confiável. Se o seu aplicativo Web carregar código não confiável, um invasor poderá injetar DLLs mal-intencionadas em seu processo e executar código mal-intencionado.
CA3012: Revisar o código para vulnerabilidades de injeção de regex Ao trabalhar com entradas não confiáveis, esteja atento aos ataques de injeção de regex. Um invasor pode usar a injeção de regex para modificar maliciosamente uma expressão regular, para fazer com que o regex corresponda a resultados não intencionais ou para fazer com que o regex consuma CPU excessiva, resultando em um ataque de negação de serviço.
CA3061: Não adicionar esquema por URL Não use a sobrecarga insegura do método Add porque ele pode causar referências externas perigosas.
CA3075: Processamento DTD inseguro Se você usar instâncias inseguras de DTDProcessing ou fazer referência a fontes de entidades externas, o analisador poderá aceitar entradas não confiáveis e divulgar informações confidenciais para invasores.
CA3076: Execução de script XSLT insegura Se você executar XSLT (Extensible Stylesheet Language Transformations) em aplicativos .NET de forma insegura, o processador poderá resolver referências de URI não confiáveis que podem divulgar informações confidenciais a invasores, levando a ataques de negação de serviço e entre sites.
CA3077: Processamento não seguro em design de API, documento XML e leitor de texto XML Ao projetar uma API derivada de XMLDocument e XMLTextReader, esteja atento ao DtdProcessing. O uso de instâncias inseguras de DTDProcessing ao fazer referência ou resolver fontes de entidades externas ou definir valores inseguros no XML pode levar à divulgação de informações.
CA3147: Marcar manipuladores de verbos com ValidateAntiForgeryToken Ao projetar um controlador MVC ASP.NET, esteja atento aos ataques de falsificação de solicitação entre sites. Um ataque de falsificação de solicitação entre sites pode enviar solicitações maliciosas de um usuário autenticado para seu controlador MVC ASP.NET.
CA5350: Não use algoritmos criptográficos fracos Algoritmos de encriptação fracos e funções de hashing são utilizados atualmente por uma série de razões, mas não devem ser utilizados para garantir a confidencialidade ou integridade dos dados que protegem. Esta regra é acionada quando encontra algoritmos TripleDES, SHA1 ou RIPEMD160 no código.
CA5351: Não use algoritmos criptográficos quebrados Algoritmos criptográficos quebrados não são considerados seguros e seu uso deve ser fortemente desencorajado. Esta regra é acionada quando encontra o algoritmo de hash MD5 ou os algoritmos de encriptação DES ou RC2 no código.
CA5358: Não use modos de codificação não seguros Não use modos de codificação não seguros
CA5359: Não desative a validação de certificado Um certificado pode ajudar a autenticar a identidade do servidor. Os clientes devem validar o certificado do servidor para garantir que as solicitações sejam enviadas ao servidor pretendido. Se o ServerCertificateValidationCallback sempre retornar true, qualquer certificado passará pela validação.
CA5360: Não chame métodos perigosos na desserialização A desserialização insegura é uma vulnerabilidade que ocorre quando dados não confiáveis são usados para abusar da lógica de um aplicativo, infligir um ataque de negação de serviço (DoS) ou até mesmo executar código arbitrário ao ser desserializado. É frequentemente possível que usuários mal-intencionados abusem desses recursos de desserialização quando o aplicativo está desserializando dados não confiáveis que estão sob seu controle. Especificamente, invoque métodos perigosos no processo de desserialização. Ataques bem-sucedidos de desserialização insegura podem permitir que um invasor execute ataques como ataques DoS, desvios de autenticação e execução remota de código.
CA5361: Não desative o uso Schannel de criptografia forte Configuração Switch.System.Net.DontEnableSchUseStrongCrypto para true enfraquecer a criptografia usada em conexões TLS (Transport Layer Security) de saída. Uma criptografia mais fraca pode comprometer a confidencialidade da comunicação entre seu aplicativo e o servidor, tornando mais fácil para os invasores espionar dados confidenciais.
CA5362: Ciclo de referência potencial no gráfico de objeto desserializado Se desserializar dados não confiáveis, qualquer código que processe o gráfico de objeto desserializado precisa lidar com ciclos de referência sem entrar em loops infinitos. Isso inclui o código que faz parte de um retorno de chamada de desserialização e o código que processa o gráfico de objeto após a conclusão da desserialização. Caso contrário, um invasor pode executar um ataque de negação de serviço com dados mal-intencionados contendo um ciclo de referência.
CA5363: Não desative a validação de solicitação A validação de solicitação é um recurso do ASP.NET que examina solicitações HTTP e determina se elas contêm conteúdo potencialmente perigoso que pode levar a ataques de injeção, incluindo scripts entre sites.
CA5364: Não use protocolos de segurança preteridos Transport Layer Security (TLS) protege a comunicação entre computadores, mais comumente com HTTPS (Hypertext Transfer Protocol Secure). As versões de protocolo mais antigas do TLS são menos seguras do que o TLS 1.2 e o TLS 1.3 e são mais propensas a ter novas vulnerabilidades. Evite versões de protocolo mais antigas para minimizar o risco.
CA5365: Não desative a verificação de cabeçalho HTTP A verificação de cabeçalho HTTP permite a codificação do retorno de carro e dos caracteres de nova linha, \r e \n, encontrados nos cabeçalhos de resposta. Essa codificação pode ajudar a evitar ataques de injeção que exploram um aplicativo que ecoa dados não confiáveis contidos pelo cabeçalho.
CA5366: Usar XmlReader para DataSet Read XML Usar um DataSet para ler XML com dados não confiáveis pode carregar referências externas perigosas, que devem ser restritas usando um XmlReader com um resolvedor seguro ou com o processamento DTD desativado.
CA5367: Não serializar tipos com campos de ponteiro Esta regra verifica se há uma classe serializável com um campo de ponteiro ou propriedade. Os membros que não podem ser serializados podem ser um ponteiro, como membros estáticos ou campos marcados com NonSerializedAttribute.
CA5368: Definir ViewStateUserKey para classes derivadas da página Definir a ViewStateUserKey propriedade pode ajudá-lo a evitar ataques ao seu aplicativo, permitindo que você atribua um identificador à variável de estado de exibição para usuários individuais para que os invasores não possam usar a variável para gerar um ataque. Caso contrário, haverá vulnerabilidades à falsificação de pedidos entre sites.
CA5369: Usar XmlReader para desserializar O processamento de esquemas DTD e XML não confiáveis pode permitir o carregamento de referências externas perigosas, que devem ser restritas usando um XmlReader com um resolvedor seguro ou com o processamento de esquema embutido DTD e XML desabilitado.
CA5370: Usar XmlReader para validar o leitor O processamento de esquemas DTD e XML não confiáveis pode permitir o carregamento de referências externas perigosas. Esse carregamento perigoso pode ser restringido usando um XmlReader com um resolvedor seguro ou com o processamento de esquema embutido DTD e XML desativado.
CA5371: Usar XmlReader para leitura de esquema O processamento de esquemas DTD e XML não confiáveis pode permitir o carregamento de referências externas perigosas. Usar um XmlReader com um resolvedor seguro ou com DTD e XML inline schema processing desabilitado restringe isso.
CA5372: Usar XmlReader para XPathDocument O processamento de XML a partir de dados não confiáveis pode carregar referências externas perigosas, que podem ser restringidas usando um XmlReader com um resolvedor seguro ou com o processamento DTD desabilitado.
CA5373: Não use a função de derivação de chave obsoleta Esta regra deteta a invocação de métodos System.Security.Cryptography.PasswordDeriveBytes de derivação de chave fraca e Rfc2898DeriveBytes.CryptDeriveKey. System.Security.Cryptography.PasswordDeriveBytes usou um algoritmo fraco PBKDF1.
CA5374: Não use XslTransform Esta regra verifica se System.Xml.Xsl.XslTransform está instanciada no código. System.Xml.Xsl.XslTransform está agora obsoleta e não deve ser usada.
CA5375: Não use assinatura de acesso compartilhado de conta Uma SAS de conta pode delegar acesso a operações de leitura, gravação e exclusão em contêineres de blob, tabelas, filas e compartilhamentos de arquivos que não são permitidos com uma SAS de serviço. No entanto, ele não oferece suporte a políticas no nível de contêiner e tem menos flexibilidade e controle sobre as permissões concedidas. Uma vez que os usuários mal-intencionados obtê-lo, sua conta de armazenamento será comprometida facilmente.
CA5376: Usar SharedAccessProtocol HttpsOnly SAS são dados confidenciais que não podem ser transportados em texto simples em HTTP.
CA5377: Usar política de acesso em nível de contêiner Uma política de acesso no nível do contêiner pode ser modificada ou revogada a qualquer momento. Ele fornece maior flexibilidade e controle sobre as permissões que são concedidas.
CA5378: Não desative ServicePointManagerSecurityProtocols Configuração Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols para true limitar as conexões TLS (Transport Layer Security) do Windows Communication Framework (WCF) ao uso do TLS 1.0. Essa versão do TLS será preterida.
CA5379: Não use algoritmo de função de derivação de chave fraca O Rfc2898DeriveBytes padrão da classe é usar o SHA1 algoritmo. Você deve especificar o algoritmo de hash a ser usado em algumas sobrecargas do construtor com SHA256 ou superior. Observe que HashAlgorithm a propriedade só tem um get acessador e não tem um overridden modificador.
CA5380: Não adicione certificados ao armazenamento raiz Esta regra deteta o código que adiciona um certificado ao armazenamento de certificados das Autoridades de Certificação Raiz Confiáveis. Por padrão, o armazenamento de certificados de Autoridades de Certificação Raiz Confiáveis é configurado com um conjunto de CAs públicas que atendeu aos requisitos do Programa de Certificados Raiz da Microsoft.
CA5381: Verifique se os certificados não são adicionados ao armazenamento raiz Esta regra deteta o código que potencialmente adiciona um certificado ao armazenamento de certificados das Autoridades de Certificação Raiz Confiáveis. Por padrão, o armazenamento de certificados de Autoridades de Certificação Raiz Confiáveis é configurado com um conjunto de autoridades de certificação (CAs) públicas que atenderam aos requisitos do Programa de Certificados Raiz da Microsoft.
CA5382: Use cookies seguros no ASP.NET Core As aplicações disponíveis através de HTTPS devem utilizar cookies seguros, que indicam ao navegador que o cookie só deve ser transmitido utilizando Secure Sockets Layer (SSL).
CA5383: Garantir o uso de cookies seguros no ASP.NET Core As aplicações disponíveis através de HTTPS devem utilizar cookies seguros, que indicam ao navegador que o cookie só deve ser transmitido utilizando Secure Sockets Layer (SSL).
CA5384: Não use algoritmo de assinatura digital (DSA) DSA é um algoritmo de encriptação assimétrica fraca.
CA5385: Use o algoritmo Rivest–Shamir–Adleman (RSA) com tamanho de chave suficiente Uma chave RSA menor que 2048 bits é mais vulnerável a ataques de força bruta.
CA5386: Evite codificar o valor SecurityProtocolType Transport Layer Security (TLS) protege a comunicação entre computadores, mais comumente com HTTPS (Hypertext Transfer Protocol Secure). As versões de protocolo TLS 1.0 e TLS 1.1 foram preteridas, enquanto TLS 1.2 e TLS 1.3 são atuais. No futuro, o TLS 1.2 e o TLS 1.3 poderão ser preteridos. Para garantir que seu aplicativo permaneça seguro, evite codificar uma versão do protocolo e direcione pelo menos o .NET Framework v4.7.1.
CA5387: Não use a função de derivação de tecla fraca com contagem de iteração insuficiente Esta regra verifica se uma chave criptográfica foi gerada por Rfc2898DeriveBytes com uma contagem de iteração inferior a 100.000. Uma contagem de iteração mais alta pode ajudar a mitigar ataques de dicionário que tentam adivinhar a chave criptográfica gerada.
CA5388: Garanta uma contagem de iteração suficiente ao usar a função de derivação de chave fraca Esta regra verifica se uma chave criptográfica foi gerada por Rfc2898DeriveBytes uma contagem de iteração que pode ser inferior a 100.000. Uma contagem de iteração mais alta pode ajudar a mitigar ataques de dicionário que tentam adivinhar a chave criptográfica gerada.
CA5389: Não adicione o caminho do item de arquivo ao caminho do sistema de arquivos de destino O caminho do arquivo pode ser relativo e pode levar ao acesso ao sistema de arquivos fora do caminho de destino esperado do sistema de arquivos, levando a alterações maliciosas de configuração e execução remota de código por meio da técnica lay-and-wait.
CA5390: Não codificar chave de criptografia Para que um algoritmo simétrico seja bem-sucedido, a chave secreta deve ser conhecida apenas pelo emissor e pelo recetor. Quando uma chave é codificada, ela é facilmente descoberta. Mesmo com binários compilados, é fácil para usuários mal-intencionados extraí-lo. Uma vez que a chave privada é comprometida, o texto cifrado pode ser descriptografado diretamente e não é mais protegido.
CA5391: Use tokens antifalsificação em controladores MVC ASP.NET Core Lidar com um POST, PUT, PATCHou DELETE solicitação sem validar um token antifalsificação pode ser vulnerável a ataques de falsificação de solicitação entre sites. Um ataque de falsificação de solicitação entre sites pode enviar solicitações maliciosas de um usuário autenticado para seu controlador MVC ASP.NET Core.
CA5392: Usar o atributo DefaultDllImportSearchPaths para P/Invokes Por padrão, P/Invoke funciona usando DllImportAttribute sondar vários diretórios, incluindo o diretório de trabalho atual para a biblioteca carregar. Isso pode ser um problema de segurança para determinados aplicativos, levando ao sequestro de DLL.
CA5393: Não use o valor DllImportSearchPath não seguro Pode haver uma DLL mal-intencionada nos diretórios de pesquisa de DLL padrão e diretórios de assembly. Ou, dependendo de onde seu aplicativo é executado, pode haver uma DLL mal-intencionada no diretório do aplicativo.
CA5394: Não use aleatoriedade insegura O uso de um gerador de números pseudoaleatórios criptograficamente fraco pode permitir que um invasor preveja qual valor sensível à segurança será gerado.
CA5395: Atributo Miss HttpVerb para métodos de ação Todos os métodos de ação que criam, editam, excluem ou modificam dados precisam ser protegidos com o atributo antifalsificry contra ataques de falsificação de solicitação entre sites. Executar uma operação GET deve ser uma operação segura que não tenha efeitos colaterais e não modifique seus dados persistentes.
CA5396: Definir HttpOnly como true para HttpCookie Como medida de defesa em profundidade, certifique-se de que os cookies HTTP sensíveis à segurança sejam marcados como HttpOnly. Isso indica que os navegadores da Web devem impedir que scripts acessem os cookies. Os scripts maliciosos injetados são uma forma comum de roubar cookies.
CA5397: Não use valores SslProtocols preteridos Transport Layer Security (TLS) protege a comunicação entre computadores, mais comumente com HTTPS (Hypertext Transfer Protocol Secure). As versões de protocolo mais antigas do TLS são menos seguras do que o TLS 1.2 e o TLS 1.3 e são mais propensas a ter novas vulnerabilidades. Evite versões de protocolo mais antigas para minimizar o risco.
CA5398: Evite valores SslProtocols codificados Transport Layer Security (TLS) protege a comunicação entre computadores, mais comumente com HTTPS (Hypertext Transfer Protocol Secure). As versões de protocolo TLS 1.0 e TLS 1.1 foram preteridas, enquanto TLS 1.2 e TLS 1.3 são atuais. No futuro, o TLS 1.2 e o TLS 1.3 poderão ser preteridos. Para garantir que seu aplicativo permaneça seguro, evite codificar uma versão do protocolo.
CA5399: Definitivamente desativar a verificação da lista de revogação de certificado HttpClient Um certificado revogado não é mais confiável. Ele pode ser usado por invasores que passam alguns dados maliciosos ou roubam dados confidenciais na comunicação HTTPS.
CA5400: Verifique se a verificação da lista de revogação de certificados HttpClient não está desabilitada Um certificado revogado não é mais confiável. Ele pode ser usado por invasores que passam alguns dados maliciosos ou roubam dados confidenciais na comunicação HTTPS.
CA5401: Não use CreateEncryptor com IV não padrão A criptografia simétrica deve sempre usar um vetor de inicialização não repetível para evitar ataques de dicionário.
CA5402: Use CreateEncryptor com o IV padrão A criptografia simétrica deve sempre usar um vetor de inicialização não repetível para evitar ataques de dicionário.
CA5403: Não codificar certificado O data parâmetro ou rawData de um X509Certificate construtor ou X509Certificate2 é codificado.
CA5404: Não desative as verificações de validação de token TokenValidationParameters As propriedades que controlam a validação de token não devem ser definidas como false.
CA5405: Nem sempre ignore a validação de token em delegados O retorno de chamada atribuído ou AudienceValidatorLifetimeValidator sempre retorna.true
IL3000: Evite acessar o caminho do arquivo Assembly ao publicar como um único arquivo Evite acessar o caminho do arquivo Assembly ao publicar como um único arquivo.
IL3001: Evite acessar o caminho do arquivo Assembly ao publicar como um arquivo único Evite acessar o caminho do arquivo Assembly ao publicar como um único arquivo.
IL3002: Evite chamar membros anotados com 'RequiresAssemblyFilesAttribute' ao publicar como um único arquivo Evite chamar membros anotados com 'RequiresAssemblyFilesAttribute' ao publicar como um único arquivo
IL3003: As anotações 'RequiresAssemblyFilesAttribute' devem corresponder em todas as implementações ou substituições de interface. As anotações 'RequiresAssemblyFilesAttribute' devem corresponder em todas as implementações ou substituições de interface.

Legenda

A tabela a seguir mostra o tipo de informação fornecida para cada regra na documentação de referência.

Item Description
Type O TypeName para a regra.
ID da regra O identificador exclusivo da regra. RuleId e Category são usados para a supressão de um aviso na fonte.
Categoria A categoria da regra, por exemplo, segurança.
A correção está quebrando ou não quebrando Se a correção para uma violação da regra é uma mudança de rutura. Interromper a alteração significa que um assembly que tem uma dependência do destino que causou a violação não será recompilado com a nova versão corrigida ou poderá falhar em tempo de execução devido à alteração. Quando várias correções estão disponíveis e pelo menos uma correção é uma alteração de quebra e uma correção não é, tanto 'Quebrando' quanto 'Não quebrando' são especificados.
Motivo O código gerenciado específico que faz com que a regra gere um aviso.
Description Discute as questões que estão por trás do aviso.
Como corrigir violações Explica como alterar o código-fonte para satisfazer a regra e evitar que ela gere um aviso.
Quando suprimir avisos Descreve quando é seguro suprimir um aviso da regra.
Código de exemplo Exemplos que violam a regra e exemplos corrigidos que satisfazem a regra.
Regras conexas Regras conexas.