Avisos da análise de código para código gerenciado por CheckId
A tabela a seguir lista avisos de análise de código para código gerenciado pelo identificador CheckId do aviso.
Avisos
CheckId |
Aviso |
Descrição |
---|---|---|
CA1000 |
Quando um membro estático de um tipo genérico é chamado, o argumento de tipo deve ser especificado para o tipo.Quando um membro de instância genérico que não dá suporte à inferência é chamado, o argumento de tipo deve ser especificado para o membro.Nesses dois casos, a sintaxe para especificar o argumento de tipo é diferente e facilmente confundida. |
|
CA1001 |
CA1001: tipos que tenham 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 indiretamente possui um recurso não gerenciado e deve implementar a interface IDisposable. |
CA1002 |
System.Collections.Generic.List<(Of <(T>)>) é uma coleção genérica projetada para desempenho, e não herança.Por isso, List não contém membros virtuais.As coleções genéricas projetadas para herança devem ser expostas em seu lugar. |
|
CA1003 |
Um tipo contém um representante que retorna nulo, cuja assinatura contém dois parâmetros (o primeiro um objeto e o segundo um tipo atribuível a EventArgs), e o destino do assembly de contenção é o Microsoft .NET Framework 2.0. |
|
CA1004 |
CA1004: os métodos genéricos devem fornecer o parâmetro de tipo |
Inferência é como o argumento de tipo de um método genérico é determinado pelo tipo de argumento passado para o método, em vez da especificação explícita do argumento de tipo.Para habilitar a inferência, a assinatura do parâmetro de um método genérico deve incluir um parâmetro que seja do mesmo tipo do parâmetro de tipo para o método.Nesse caso, o argumento de tipo não precisa ser especificado.Durante o uso da inferência para todos os parâmetros de tipo, a sintaxe para chamar métodos de instância genéricos e não genéricos é idêntica; isso simplifica a usabilidade de métodos genéricos. |
CA1005 |
Quanto mais parâmetros de tipo um tipo genérico contiver, mais difícil será saber e lembrar-se do que cada parâmetro de tipo representa.Isso costuma ser óbvio com um parâmetro de tipo, como em ListT<> e, em determinados casos que tenham dois parâmetros de tipo, como em Dictionary<TKey, TValue>.No entanto, se houver mais de dois parâmetros de tipo, a dificuldade ficará muito grande para a maioria dos usuários. |
|
CA1006 |
CA1006: não aninhar tipos genéricos em assinaturas de membro |
Um argumento de tipo aninhado é um argumento de tipo que também é um tipo genérico.Para chamar um membro cuja assinatura contenha um argumento de tipo aninhado, o usuário deve criar uma instância de um tipo genérico e passar esse tipo para o construtor de um segundo tipo genérico.O procedimento e a sintaxe obrigatórios são complexos e devem ser evitados. |
CA1007 |
Um método visível externamente contém um parâmetro de referência do tipo System.Object.O uso de um método genérico permite que todos os tipos, sujeitos a restrições, sejam passados para o método sem primeiramente converter o tipo no tipo de parâmetro de referência. |
|
CA1008 |
O valor padrão de uma enumeração não inicializada, assim como o de outros tipos de valor, é zero.Uma enumeração atribuída por nonflags deve definir um membro usando o valor de zero de forma que o valor padrão seja um valor válido da enumeração.Se uma enumeração que tem o atributo FlagsAttribute aplicado definir um membro com valor, seu nome deverá ser “None” para indicar que nenhum valor foi definido na enumeração. |
|
CA1009 |
Os métodos de manipulador de eventos utilizam dois parâmetros.O primeiro é do tipo System.Object e é chamado de "sender".Este é o objeto que acionou o evento.O segundo parâmetro é do tipo System.EventArgs e é chamado de "e".Esses são os dados associados ao evento.Os métodos do manipulador de eventos não devem retornar um valor; na linguagem de programação C#, isso é indicado pelo tipo de retorno nulo. |
|
CA1010 |
Para ampliar a usabilidade de uma coleção, implemente uma das interfaces da coleção genéricas.Em seguida, a coleção pode ser usada para popular tipos de coleção genéricos. |
|
CA1011 |
Quando um tipo de base é especificado como um parâmetro em uma declaração de método, qualquer tipo derivado do tipo de base pode ser passado como o argumento correspondente ao método.Se a funcionalidade adicional fornecida pelo tipo de parâmetro derivado não for necessária, o uso do tipo de base permitirá um uso mais amplo do método. |
|
CA1012 |
Construtores em tipos abstratos só podem ser chamados por tipos derivados.Como construtores públicos criam instâncias de um tipo e não é possível criar instâncias de um tipo abstrato, um tipo abstrato com um construtor público é projetado incorretamente. |
|
CA1013 |
CA1013: sobrecarregar igualdades de operador em add e subtract de sobrecarga |
Um tipo público ou protegido implementa os operadores de adição ou subtração sem implementar o operador de igualdade. |
CA1014 |
A CLS (Common Language Specification) define restrições de nomenclatura, tipos de dados e regras que assemblies deverão respeitar se forem usados em todas as linguagens de programação.Um bom design determina que todos os assemblies indiquem explicitamente a conformidade com CLS usando-se CLSCompliantAttribute.Se esse atributo não estiver presente em um assembly, o assembly não será compatível. |
|
CA1016 |
O .NET Framework usa o número de versão para identificar com exclusividade um assembly e associar a tipos em assemblies altamente nomeados.O número de versão é usado com a versão e a política do publicador.Por padrão, os aplicativos só são executados com a versão do assembly com que foram criados. |
|
CA1017 |
ComVisibleAttribute determina como clientes COM acessam código gerenciado.Um bom design determina que os assemblies indiquem explicitamente a visibilidade de COM.A visibilidade de COM pode ser definida para todo o assembly e, em seguida, substituída por tipos individuais e membros de tipo.Caso esse atributo não esteja presente, o conteúdo do assembly permanece visível aos clientes COM. |
|
CA1018 |
Ao definir um atributo personalizado, você o marca usando AttributeUsageAttribute para indicar onde o atributo personalizado pode ser aplicado no código-fonte.O significado e o uso desejado de um atributo determinarão seus locais válidos no código. |
|
CA1019 |
Os atributos podem definir argumentos obrigatórios que devem ser especificados quando você aplica o atributo a um destino.Eles também são conhecidos como argumentos posicionais porque são fornecidos a construtores de atributos como parâmetros posicionais.Para cada argumento obrigatório, o atributo também deve fornecer uma propriedade somente leitura correspondente de forma que o valor do argumento possa ser recuperado no tempo de execução.Os atributos também podem definir argumentos opcionais, que também são conhecidos como argumentos nomeados.Esses argumentos são fornecidos a construtores de atributo por nome e devem ter uma propriedade de leitura/gravação correspondente. |
|
CA1020 |
Verifique se cada um dos namespaces tem uma organização lógica e se há um motivo válido para colocar tipos em um namespace populado de maneira esparsa. |
|
CA1021 |
A passagem de tipos por referência (usando out ou ref) requer experiência com ponteiros, compreensão das diferenças entre tipos de valor e tipos de referência e os métodos de tratamento com vários valores de retorno.Além disso, a diferença entre parâmetros out e ref não é amplamente compreendida. |
|
CA1023 |
Os indicadores (ou seja, propriedades indexadas) devem usar um único índice.Os indicadores multidimensionais podem reduzir significativamente a usabilidade da biblioteca. |
|
CA1024 |
Um método público ou protegido tem um nome que começa com "Get", não utiliza parâmetros e retorna um valor que não é uma matriz.O método pode ser um bom candidato a se tornar uma propriedade. |
|
CA1025 |
CA1025: substituir argumentos repetitivos por matriz de parâmetros |
Use uma matriz de parâmetros, em vez de argumentos repetidos, quando o número exato de argumentos for desconhecido e quando os argumentos variáveis forem do mesmo tipo ou puderem ser passados como o mesmo tipo. |
CA1026 |
Métodos que usam parâmetros padrão são permitidos na CLS; no entanto, a CLS permite que os compiladores ignorem os valores que são atribuídos a esses parâmetros.Para manter o comportamento desejado em todas as linguagens de programação, os métodos que usam parâmetros padrão devem ser substituídos por sobrecargas de método que forneçam os parâmetros padrão. |
|
CA1027 |
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 de maneira significativa. |
|
CA1028 |
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 seja possível alterar esse tipo subjacente, isso não é necessário ou recomendado na maioria dos cenários. |
|
CA1030 |
Essa regra detecta métodos que têm nomes que seriam usados normalmente em eventos.Se um método for chamado em resposta a uma alteração de estado claramente definida, o método deverá ser invocado por um manipulador de eventos.Os objetos que chamam o método devem acionar eventos, em vez de chamar o método diretamente. |
|
CA1031 |
As exceções gerais não devem ser capturadas.Capture uma exceção mais específica ou relance a exceção geral como a última instrução no bloco de captura. |
|
CA1032 |
Deixar de fornecer o conjunto completo de construtores pode dificultar o tratamento correto das exceções. |
|
CA1033 |
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ícita de uma interface pública e não fornece um método visível externamente alternativo com o mesmo nome. |
CA1034 |
Um tipo aninhado é um tipo declarado no escopo de outro tipo.Os tipos aninhados são úteis para encapsular detalhes de implementação privados do tipo de contenção.Usados para essa finalidade, os tipos aninhados não devem ser visíveis externamente. |
|
CA1035 |
CA1035: as implementações de ICollection têm membros fortemente tipados |
Essa regra exige que implementações de ICollection forneçam membros fortemente tipados de forma que usuários não sejam obrigados a converter argumentos no tipo Object quando usarem a funcionalidade fornecida pela interface.Essa regra pressupõe que o tipo que implementa ICollection faça isso para gerenciar uma coleção de instâncias de um tipo mais forte que Object. |
CA1036 |
Um público ou um tipo protegido implementa a interface System.IComparable.Ele não substitui Object.Equals nem sobrecarrega o operador específico da linguagem para igualdade, desigualdade, menor que ou maior que. |
|
CA1038 |
Essa regra exige que implementações de IEnumerator também forneçam uma versão fortemente tipada da propriedade Current de forma que usuários não sejam obrigados a converter o valor de retorno no tipo forte quando usarem a funcionalidade fornecida pela interface. |
|
CA1039 |
Essa regra exige que implementações de IList forneçam membros fortemente tipados de forma que usuários não sejam obrigados a converter argumentos no tipo System.Object quando usarem a funcionalidade fornecida pela interface. |
|
CA1040 |
As interfaces definem os membros que fornecem um contrato de comportamento ou de uso.A funcionalidade descrita pela interface pode ser adotada por qualquer tipo, independentemente de onde o tipo seja exibido na hierarquia de herança.Um tipo implementa uma interface fornecendo implementações para os membros da interface.Uma interface vazia não define membros; por isso, ela não define um contrato que pode ser implementado. |
|
CA1041 |
Um tipo ou um membro é marcado usando-se um atributo System.ObsoleteAttribute que não tem sua propriedade ObsoleteAttribute.Message especificada.Quando um tipo ou um membro marcado usando-se ObsoleteAttribute é compilado, a propriedade Message do atributo é exibida.Isso dá ao usuário informações sobre o tipo ou o membro obsoleto. |
|
CA1043 |
CA1043: usar argumento integral ou da cadeia de caracteres para indexadores |
Os indicadores (ou seja, propriedades indexadas) devem usar tipos integrais ou de cadeia de caracteres no índice.Esses tipos normalmente são usados na indexação de estruturas de dados e aumentam a usabilidade da biblioteca.O uso do tipo Object deve ser restrito a esses casos em que o tipo integral ou de cadeia de caracteres específico não pode ser especificado no tempo de design. |
CA1044 |
Embora seja aceitável e normalmente necessário ter uma propriedade somente leitura, as diretrizes de design proíbem o uso de propriedades somente gravação.Isso é porque a permissão para que um usuário defina um valor e o impedimento posterior para ele exiba esse valor não dão nenhuma segurança.Além disso, sem acesso de leitura, o estado de objetos compartilhados não pode ser exibido, o que limita sua utilidade. |
|
CA1045 |
A passagem de tipos por referência (usando out ou ref) requer experiência com ponteiros, compreensão das diferenças entre tipos de valor e tipos de referência e os métodos de tratamento 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 dominem o trabalho com parâmetros out ou ref. |
|
CA1046 |
CA1046: não sobrecarregar igualdades de operador em tipos de referência |
Para tipos de referência, a implementação padrão do operador de igualdade está quase sempre correta.Por padrão, duas referências só serão iguais se apontarem para o mesmo objeto. |
CA1047 |
Os tipos declaram membros protegidos de forma que a herança de tipos possa acessar ou substituir o membro.Por definição, os tipos vedados não podem ser lacrados, o que significa que os métodos protegidos em tipos lacrados não podem ser chamados. |
|
CA1048 |
Os tipos declaram métodos como virtuais de forma que a herança de tipos possa substituir a implementação do método virtual.Por definição, um tipo lacrado não pode ser herdado.Isso torna um método virtual em um tipo lacrado sem sentido. |
|
CA1049 |
CA1049: tipos que tenham recursos nativos devem ser descartáveis |
Tipos que alocam recursos não gerenciados devem implementar IDisposable para permitir que os chamadores liberem esses recursos sob demanda e reduzir o tempo de vida dos objetos que contêm os recursos. |
CA1050 |
Tipos são declarados em namespaces para evitar conflitos de nome e são uma maneira de organizar tipos relacionados em uma hierarquia de objetos. |
|
CA1051 |
O principal uso de um campo deve ser um como um detalhe da implementação.Os campos devem ser privados ou internos e devem ser expostos usando-se propriedades. |
|
CA1052 |
Um tipo público ou protegido contém apenas membros estáticos e não é declarado usando-se o modificador (Reference do C#) (NotInheritable).Um tipo que não é deve ser herdado deve ser marcado usando-se o modificador lacrado para evitar seu uso como um tipo de base. |
|
CA1053 |
CA1053: os tipos de suporte estático não devem ter construtores |
Um tipo público ou público 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 exige uma instância do tipo.A sobrecarga de cadeia de caracteres deve chamar a sobrecarga do URI (Uniform Resource Identifier) usando-se o argumento de cadeia de caracteres por questões de segurança. |
CA1054 |
CA1054: os parâmetros de URI não devem ser cadeias de caracteres |
Se um método utilizar uma representação de cadeia de caracteres de um URI, uma sobrecarga correspondente deverá ser fornecida utilizando uma instância da classe do URI, que oferece esses serviços de maneira segura e protegida. |
CA1055 |
CA1055: os valores de retorno de URI não devem ser cadeias de caracteres |
Esta regra pressupõe que o método retorne um URI.Uma representação de cadeia de caracteres de um URI está propensa a erros de análise e de codificação, e pode resultar em vulnerabilidades de segurança.A classe System.Uri fornece esses serviços de maneira segura. |
CA1056 |
CA1056: as propriedades de URI não devem ser cadeias de caracteres |
Esta regra pressupõe que a propriedade represente o URI.Uma representação de cadeia de caracteres de um URI está propensa a erros de análise e de codificação, e pode resultar em vulnerabilidades de segurança.A classe System.Uri fornece esses serviços de maneira segura. |
CA1057 |
CA1057: as sobrecargas de URI da cadeia de caracteres chamam sobrecargas System.Uri |
Um tipo declara sobrecargas de método que diferem apenas pela substituição de um parâmetro de cadeia de caracteres com um parâmetro System.Uri.A sobrecarga que utiliza o parâmetro de cadeia de caracteres não chama a sobrecarga que utiliza o parâmetro do URI. |
CA1058 |
Um tipo visível externamente estende determinados tipos de base.Use uma das alternativas. |
|
CA1059 |
CA1059: os membros não devem expor determinados tipos concretos |
Um tipo concreto é um tipo que tem uma implementação completa e, por isso, uma instância pode ser criada.Para permitir o uso difundido do membro, substitua o tipo concreto usando-se a interface sugerida. |
CA1060 |
Métodos de invocação da plataforma, como os marcados usando-se o atributo System.Runtime.InteropServices.DllImportAttribute, ou métodos definidos usando-se a palavra-chave Declare em Visual Basic, acessam um código não gerenciado.Esses métodos devem ser da classe NativeMethods, SafeNativeMethods ou UnsafeNativeMethods. |
|
CA1061 |
Um método em um tipo de base permanece oculto por um método nomeado identicamente em um tipo derivado, quando a assinatura do parâmetro do método derivado difere apenas pelos tipos derivados de maneira mais fraca do que os tipos correspondentes na assinatura do parâmetro do método de base. |
|
CA1062 |
Todos os argumentos de referência passados para os métodos visíveis externamente devem ser verificados em relação que serão nulos. |
|
CA1063 |
Todos os tipos IDisposable devem implementar o padrão Dispose corretamente. |
|
CA1064 |
Uma exceção interna só permanece visível dentro do próprio escopo interno.Depois que a exceção falha fora do escopo interno, somente a exceção de base pode ser usada para capturar a exceção.Se a exceção interna for herdada de T:System.Exception, T:System.SystemException ou T:System.ApplicationException, o código externo não terá informações suficientes para saber o que fazer com que a exceção. |
|
CA1065 |
Um método que não deve acionar exceções aciona uma exceção. |
|
CA1300 |
Para exibir corretamente uma caixa de mensagem para as culturas que usam uma ordem de leitura da direita para a esquerda, os membros RightAlign e RtlReading da enumeração MessageBoxOptions devem ser passados para o método Show. |
|
CA1301 |
Uma tecla de acesso, também conhecida como acelerador, dá ao teclado acesso a um controle usando-se a tecla ALT.Quando vários controles têm teclas de acesso duplicadas, o comportamento da tecla de acesso não é bem definido. |
|
CA1302 |
CA1302: não codificar cadeias de caracteres específicas da localidade |
A enumeração System.Environment.SpecialFolder contém membros que fazem referência às pastas especiais do sistema.Os locais dessas pastas podem ter valores diferentes em diferentes sistemas operacionais; o usuário pode alterar alguns dos locais; e os locais são diferentes para cada linguagem.O método Environment.GetFolderPath retorna os locais associados à enumeração Environment.SpecialFolder, localizada e apropriada para o computador atualmente em execução. |
CA1303 |
Um método visível externamente passa uma cadeia de caracteres literal como um parâmetro para um construtor ou método ou na biblioteca de classes de .NET Framework, e essa cadeia de caracteres deve ser localizável. |
|
CA1304 |
Um método ou um construtor chama um membro que tem uma sobrecarga que aceita um parâmetro System.Globalization.CultureInfo, e o método ou o construtor não chama a sobrecarga que utiliza o parâmetro CultureInfo.Quando um objeto CultureInfo ou System.IFormatProvider não for fornecido, o valor padrão fornecido pelo membro sobrecarregado poderá não ter o efeito desejado em todas as localidades. |
|
CA1305 |
Um método ou um construtor chama um ou mais membros que têm sobrecargas que aceitam um parâmetro System.IFormatProvider, e o método ou o construtor não chama a sobrecarga que utiliza o parâmetro IFormatProvider.Quando um objeto System.Globalization.CultureInfo ou System.IFormatProvider não for fornecido, o valor padrão fornecido pelo membro sobrecarregado poderá não ter o efeito desejado em todas as localidades. |
|
CA1306 |
A localidade determina os elementos de apresentação específicos da cultura para dados, como a formatação usada para valores numéricos, símbolos de moeda e ordem de classificação.Ao criar um DataTable ou um DataSet, você deve definir explicitamente a localidade. |
|
CA1307 |
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 |
As cadeias de caracteres devem ser normalizadas em 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 |
Uma operação de comparação de cadeia de caracteres não linguística não define o parâmetro StringComparison como Ordinal ou OrdinalIgnoreCase.Definindo-se explicitamente o parâmetro como StringComparison.Ordinal ou StringComparison.OrdinalIgnoreCase, o código normalmente ganha velocidade, fica mais correto e se torna mais confiável. |
|
CA1400 |
Um método público ou protegido é marcado usando-se o atributo System.Runtime.InteropServices.DllImportAttribute.Não foi possível localizar a biblioteca não gerenciada ou não foi possível comparar o método a uma função na biblioteca. |
|
CA1401 |
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 em Visual Basic).Esses métodos não devem ser expostos. |
|
CA1402 |
Quando os métodos sobrecarregados são expostos a clientes COM, apenas a primeira sobrecarga do método mantém seu nome.As sobrecargas subsequentes são renomeadas com exclusividade acrescentando-se ao nome um caractere de sublinhado (_) e um inteiro correspondente à ordem de declaração da sobrecarga. |
|
CA1403 |
CA1403: os tipos de layout automático não devem ser visíveis em COM |
Um tipo de valor visível por COM é marcado usando-se o atributo System.Runtime.InteropServices.StructLayoutAttribute definido como LayoutKind.Auto.O layout desses tipos pode ser alterado entre versões do .NET Framework, o que interromperá clientes COM que esperam um layout específico. |
CA1404 |
Foi feita uma chamada para o método Marshal.GetLastWin32Error ou para a função GetLastError do Win32 equivalente, e a chamada imediatamente anterior não é um método de invocação do sistema operacional. |
|
CA1405 |
CA1405: os tipos base de tipo visível em COM devem ser visíveis em COM |
Um tipo visível por COM deriva de um tipo que não é visível por COM. |
CA1406 |
CA1406: evitar argumentos Int64 para clientes do Visual Basic 6 |
Os clientes COM do Visual Basic 6 não podem acessar inteiros de 64 bits. |
CA1407 |
COM não dá suporte para métodos estáticos. |
|
CA1408 |
Tipos que usam uma interface dupla permitem que clientes sejam associados a um layout de interface específico.Todas as alterações feitas em uma versão futura do layout do tipo ou de qualquer tipo de base interromperão clientes COM associados à interface.Por padrão, se o atributo ClassInterfaceAttribute não for especificado, será usada uma interface somente de expedição. |
|
CA1409 |
Um tipo de referência marcado especificamente como visível para COM contém um construtor parametrizado público, mas não contém um construtor padrão público (sem parâmetros).Um tipo sem um construtor padrão público não pode ser criado por clientes COM. |
|
CA1410 |
CA1410: os métodos de registro COM devem ser correspondentes |
Um tipo declara um método marcado usando o atributo System.Runtime.InteropServices.ComRegisterFunctionAttribute, mas não declara um método marcado usando o atributo System.Runtime.InteropServices.ComUnregisterFunctionAttribute, ou vice-versa. |
CA1411 |
Um método marcado usando-se o atributo System.Runtime.InteropServices.ComRegisterFunctionAttribute ou o atributo System.Runtime.InteropServices.ComUnregisterFunctionAttribute permanece visível externamente. |
|
CA1412 |
Um tipo é marcado usando-se o atributo System.Runtime.InteropServices.ComSourceInterfacesAttribute, e pelo menos uma das interfaces especificadas não está marcada usando-se o atributo System.Runtime.InteropServices.InterfaceTypeAttribute definido como ComInterfaceType.InterfaceIsIDispatch. |
|
CA1413 |
CA1413: evitar campos não públicos em tipos de valor visíveis COM |
Os campos de instância não pública dos tipos de valor visíveis por COM permanecem visíveis para clientes COM.Revise o conteúdo dos campos em busca de informações que não devem ser expostas, ou isso terá efeitos não intencionais sobre o design ou a segurança. |
CA1414 |
O tipo de dados Booliano tem várias representações em código não gerenciado. |
|
CA1415 |
Esta regra procura declarações do método de invocação do sistema operacional com funções Win32 como destino que tenham um ponteiro para um parâmetro de estrutura OVERLAPPED e o parâmetro gerenciado correspondente não seja um ponteiro para uma estrutura System.Threading.NativeOverlapped. |
|
CA1500 |
CA1500: os nomes de variável não devem corresponder aos nomes de campo |
Um método de instância declara um parâmetro ou uma variável local cujo nome corresponde a um campo da instância do tipo declarante, o que leva a erros. |
CA1501 |
Um tipo está mais de quatro níveis abaixo na hierarquia de herança.As hierarquias de tipo profundamente aninhado podem ser difíceis de seguir, compreender e manter. |
|
CA1502 |
Esta regra mede o número de caminhos linearmente independentes por meio do método, o que é determinado pelo número e pela complexidade das ramificações condicionais. |
|
CA1504 |
O nome de um campo da instância começa com "s_", ou o nome do campo estático (Shared no Visual Basic) começa com "m_". |
|
CA1505 |
Um tipo ou um método tem um baixo valor de índice de facilidade de manutenção.Um baixo índice de facilidade de manutenção indica que um tipo ou um método é provavelmente difícil de manter e seria um bom candidato para um novo design. |
|
CA1506 |
Esta regra mede o acoplamento de classes contando o número de referências de tipo exclusivas que um tipo ou um método contém. |
|
CA1600 |
Não defina a prioridade do processo como Ocioso.Os processos que têm System.Diagnostics.ProcessPriorityClass.Idle ocuparão a CPU quando estariam ociosos e, assim, bloquearão a espera. |
|
CA1601 |
CA1601: não usar temporizadores que impeçam alterações no estado de energia |
A atividade periódica de alta frequência manterá a CPU ocupada e interferirá nos temporizadores ociosos que economizam energia e desligam monitores e discos rígidos. |
CA1700 |
Esta regra pressupõe que um membro da enumeração que tenha um nome que contém "reserved" 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 alteração drástica. |
|
CA1701 |
Cada palavra na cadeia de caracteres de recurso é dividida em tokens com base em maiúsculas.Cada combinação contígua de dois tokens é verificada pela biblioteca do verificador ortográfico da Microsoft.Se reconhecidas, as palavras produzirão uma violação da regra. |
|
CA1702 |
CA1702: palavras compostas devem ter maiúsculas e minúsculas corretas |
O nome de um identificador contém várias palavras e pelo menos uma das palavras parece ser uma palavra composta que não tem maiúsculas corretas. |
CA1703 |
CA1703: as cadeias de caracteres do recurso devem ter a ortografia correta |
Uma cadeia de caracteres de recurso contém uma ou mais palavras não reconhecidas pela biblioteca do verificador ortográfico da Microsoft. |
CA1704 |
CA1704: os identificadores do recurso devem ter a ortografia correta |
O nome de um identificador visível externamente contém uma ou mais palavras não reconhecidas pela biblioteca do verificador ortográfico da Microsoft. |
CA1707 |
Por convenção, os nomes de identificador não contêm o caractere de sublinhado (_).Esta regra verifica namespaces, tipos, membros e parâmetros. |
|
CA1708 |
CA1708: os identificadores devem ser diferentes além de maiúsculas de minúsculas |
Os identificadores de namespaces, tipos, membros e parâmetros não podem se diferenciar apenas por maiúsculas porque linguagens com o Common Language Runtime como destino não precisam diferenciar maiúsculas e minúsculas. |
CA1709 |
CA1709: os identificadores do recurso devem ter maiúsculas e minúsculas corretas |
Por convenção, nomes de parâmetro usam maiúsculas, namespace e tipo, e nomes de membro usam maiúsculas Pascal. |
CA1710 |
Por convenção, os nomes de tipos que estendem determinados tipos de base ou que implementam determinadas interfaces, ou tipos derivados desses tipos, têm um sufixo associado ao tipo de base ou à interface. |
|
CA1711 |
Por convenção, apenas os nomes de tipos que estendem determinados tipos de base ou que implementam determinadas 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 |
CA1712: não use valores enum como prefixo com o nome do tipo |
Os nomes dos membros de enumeração não são prefixados usando-se o nome de tipo porque as ferramentas de desenvolvimento devem fornecer informações de tipo. |
CA1713 |
CA1713: os eventos não devem ter um prefixo anterior ou posterior |
O nome de um evento começa com "Before" ou "After".Para nomear eventos relacionados acionados em uma sequência específica, use o presente ou o pretérito para indicar a posição relativa na sequência de ações. |
CA1714 |
Uma enumeração pública tem o atributo System.FlagsAttribute, e seu nome não termina com "s".Tipos marcados usando FlagsAttribute têm nomes que estão no plural porque o atributo indica que mais de um valor pode ser especificado. |
|
CA1715 |
O nome de uma interface visível externamente não começa com "I" em maiúsculas.O nome de um parâmetro de tipo genérico em um tipo visível externamente ou método não começa com um "T" em maiúsculas. |
|
CA1716 |
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 de namespaces e tipos não devem corresponder a palavras-chave definidas por com o Common Language Runtime como destino. |
CA1717 |
As convenções de nomenclatura determinam que um nome no plural para uma enumeração indica que mais de um valor de enumeração pode ser especificado ao mesmo tempo. |
|
CA1719 |
CA1719: os nomes de parâmetro não devem corresponder aos nomes de membro |
Um nome de parâmetro deve informar o significado de um parâmetro e um nome de membro deve informar o significado de um membro.Seria um design raro se eles fossem iguais.A nomenclatura de um parâmetro com o mesmo nome do membro não é intuitiva e dificulta o uso da biblioteca. |
CA1720 |
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 da linguagem. |
|
CA1721 |
CA1721: os nomes de propriedade não devem corresponder a métodos get |
O nome de um membro público ou protegido começa com "Get" e, de outra forma, corresponde ao nome de uma propriedade pública ou protegida. Métodos "Get" e propriedades devem ter nomes que diferenciem claramente a função. |
CA1722 |
Por convenção, somente determinados elementos de programação têm nomes que começam com um prefixo específico. |
|
CA1724 |
CA1724: os nomes de tipo não devem corresponder a namespaces |
Os nomes de tipo não devem corresponder aos nomes de namespaces definidos na biblioteca de classes do .NET Framework.A violação dessa regra pode reduzir a usabilidade da biblioteca. |
CA1725 |
CA1725: os nomes de parâmetro devem corresponder à declaração base |
A nomenclatura consistente dos 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 diferente do nome na declaração de base pode causar confusão em relação à possibilidade do método ser uma substituição do método de base ou de uma nova sobrecarga do método. |
CA1726 |
O nome de um identificador visível externamente inclui um termo para o qual existe um termo preferido, alternativo.Como alternativa, o nome inclui o termo "Flag" ou "Flags". |
|
CA1800 |
As conversões duplicadas diminui o desempenho, especialmente quando as conversões são realizadas em instruções de iteração compactas. |
|
CA1801 |
Uma assinatura de método inclui um parâmetro que não é usado no corpo do método. |
|
CA1802 |
Um campo é declarado estático e somente leitura (Shared e ReadOnly no Visual Basic), e é inicializado usando-se um valor computável no tempo de compilação.Como o valor atribuído ao campo de destino é computável no tempo de compilação, altere a declaração para um campo const (Const no Visual Basic) de modo que o valor seja computado no tempo de compilação, e não no tempo de execução. |
|
CA1804 |
As variáveis locais não utilizadas e as atribuições desnecessárias aumentam o tamanho de um assembly e diminuem o desempenho. |
|
CA1806 |
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 jamais é usada; um método ou COM ou P/Invoke retorna um HRESULT ou um código de erro que nunca é usado. |
|
CA1809 |
Uma otimização de desempenho comum é armazenar um valor em um registro de processador, em vez da memória, algo conhecido como "registro do valor".Para aumentar a possibilidade de que o registro de todas as variáveis locais seja cancelado, limite o número de variáveis locais a 64. |
|
CA1810 |
CA1810: inicializar campos estáticos de tipo de referência embutido |
Quando um tipo declara um construtor estático explícito, o compilador JIT (just-in-time) adiciona uma verificação a cada método estático e construtor de instância do tipo para garantir que o construtor estático tenha sido chamado anteriormente.As verificações de construtor estático podem diminuir o desempenho. |
CA1811 |
Um membro particular ou interno (no nível de assembly) não tem chamadores no assembly; ele não é invocado pelo Common Language Runtime e não é invocado por um representante. |
|
CA1812 |
Uma instância de um tipo no nível de assembly não é criada pelo código no assembly. |
|
CA1813 |
A biblioteca de classes do .NET Framework fornece métodos para recuperar atributos personalizados.Por padrão, esses métodos pesquisam a hierarquia de herança do atributo.A validação do atributo elimina a pesquisa na hierarquia de herança e pode melhorar o desempenho. |
|
CA1814 |
CA1814: preferir matrizes denteadas em relação às multidimensionais |
Uma matriz denteada é uma matriz cujos elementos são matrizes.As matrizes que constituem os elementos podem ter tamanhos diferentes, o que leva a menos espaço desperdiçado para alguns conjuntos de dados. |
CA1815 |
CA1815: substituir igualdades e igualdades de operador 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.Reflection é computacionalmente cara, e pode ser desnecessário comparar a igualdade de cada campo.Se você espera que os usuários comparem ou classifiquem instâncias, ou usem instâncias como chaves de tabela de hash, o tipo de valor deverá implementar Equals. |
CA1816 |
Um método que é uma implementação de Dispose não chama GC.SuppressFinalize; ou um método que não é uma implementação de Dispose chama GC.SuppressFinalize; ou um método chama GC.SuppressFinalize e passa algo que não seja isso (Me no Visual Basic). |
|
CA1819 |
As matrizes retornadas por propriedades não estão protegidas contra a gravação, mesmo quando a propriedade é somente leitura.Para manter a matriz à prova de adulteração, a propriedade deve retornar uma cópia da matriz.Normalmente, os usuários não compreenderão as implicações adversas no desempenho de chamar uma propriedade assim. |
|
CA1820 |
CA1820: teste para cadeias de caracteres vazias usando o comprimento da cadeia de caracteres |
A comparação de cadeias de caracteres usando-se a propriedade String.Length ou o método String.IsNullOrEmpty é significativamente mais rápida do que o uso de Equals. |
CA1821 |
Sempre que possível, evite finalizadores por conta da sobrecarga adicional no desempenho envolvida no acompanhamento do tempo de vida do objeto.Um finalizador vazio incorre na sobrecarga adicionada e não oferece benefícios. |
|
CA1822 |
Os membros que não acessam dados da instância ou os métodos da instância de chamada podem ser marcados como estáticos (Shared no Visual Basic).Depois que você 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 o código sensível ao desempenho. |
|
CA1823 |
Foram detectados campos particulares que aparentemente não são acessados no assembly. |
|
CA1824 |
CA1824: marcar assemblies com NeutralResourcesLanguageAttribute |
O atributo NeutralResourcesLanguage informa o ResourceManager da linguagem que foi usada para exibir os recursos de uma cultura neutra para um assembly.Isso melhora o desempenho da pesquisa para o primeiro recurso carregado e pode reduzir o conjunto de trabalho. |
CA1900 |
Essa regra verifica se as estruturas declaradas usando-se o layout explícito serão alinhadas corretamente durante a realização de marshaling para o código não gerenciado em sistemas operacionais de 64 bits. |
|
CA1901 |
Essa regra avalia o tamanho de cada parâmetro e o valor de retorno de um P/Invoke, além de verificar se o tamanho do parâmetro está correto durante a realização de marshaling para código não gerenciado em sistemas operacionais 32 e 64 bits. |
|
CA1903 |
Um membro ou um tipo está usando um membro ou um tipo que foi introduzido em um service pack não incluído com a estrutura de destino do projeto. |
|
CA2000 |
Como pode ocorrer um evento excepcional 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. |
|
CA2001 |
Um membro chama um método potencialmente perigoso ou problemático. |
|
CA2002 |
Diz-se que um objeto tem uma identidade fraca quando puder ser acessado diretamente em todos os limites de domínio do aplicativo.Um thread que tente adquirir um bloqueio em um objeto com uma identidade fraca pode ser bloqueado por um segundo thread em um domínio de aplicativo diferente com um bloqueio no mesmo objeto. |
|
CA2003 |
Um thread gerenciado está sendo tratado como um thread do Win32. |
|
CA2004 |
Se você converter no uso de SafeHandle, remova todas as chamadas para GC.KeepAlive (objeto).Nesse caso, as classes não precisarão chamar GC.KeepAlive.Isso pressupõe que elas não tenham um finalizador, mas dependam de SafeHandle para finalizar o identificador do sistema operacional para elas. |
|
CA2006 |
O uso de IntPtr em código gerenciado pode indicar um problema de segurança e confiabilidade em potencial.Todos os usos de IntPtr devem ser examinados para determinar se o uso de um SafeHandle, ou tecnologia semelhante, é necessário em seu lugar. |
|
CA2100 |
CA2100: revisar consultas SQL para vulnerabilidades de segurança |
Um método define a propriedade System.Data.IDbCommand.CommandText usando uma cadeia de caracteres criada com base em um argumento da cadeia de caracteres para o método.Esta regra pressupõe que o argumento da cadeia de caracteres contenha a entrada do usuário.Uma cadeia de caracteres de comando SQL criada com base na entrada do usuário é vulnerável a ataques de injeção SQL. |
CA2101 |
CA2101: especificar marshaling para argumentos da cadeia de caracteres P/Invoke |
Um membro de invocação da plataforma permite chamadores parcialmente confiáveis, tem um parâmetro de cadeia de caracteres e não realiza marshaling da cadeia de caracteres explicitamente.Isso pode causar uma vulnerabilidade de segurança em potencial. |
CA2102 |
CA2102: capturar exceções que não sejam CLSCompliant em manipuladores gerais |
Um membro em um assembly que não é marcado usando-se o RuntimeCompatibilityAttribute ou que é marcado como RuntimeCompatibility (WrapNonExceptionThrows = false) contém um bloco de captura que trata System.Exception e não contém um bloco de captura geral imediatamente posterior. |
CA2103 |
Um método usa segurança obrigatória e pode construir a permissão usando as informações de estado ou os valores de retorno que podem ser alterados desde que a demanda esteja ativa.Use a segurança declarativa sempre que possível. |
|
CA2104 |
CA2104: não declarar tipos de referência mutáveis somente leitura |
Um tipo visível externamente contém um campo somente leitura visível externamente que é um tipo de referência mutável.Um tipo mutável é um tipo cujos dados da instância podem ser modificados. |
CA2105 |
Quando você aplica o modificador somente leitura (ReadOnly in Visual Basic) a um campo que contém uma matriz, o campo não pode ser alterado para fazer referência a uma matriz diferente.No entanto, os elementos da matriz que são armazenados em um campo somente leitura podem ser alterados. |
|
CA2106 |
Um método declara uma permissão e nenhuma verificação de segurança é realizada no chamador.A declaração de uma permissão de segurança sem realizar verificações de segurança pode deixar uma fraqueza de segurança explorável no código. |
|
CA2107 |
O método PermitOnly e as ações de segurança CodeAccessPermission.Deny só devem ser usados por pessoas que tenham um conhecimento avançado de segurança do .NET Framework.O código que usa essas ações de segurança deve passar por uma revisão de segurança. |
|
CA2108 |
Um tipo de valor público ou protegido é resguardado por acesso a dados ou exigências de vínculo. |
|
CA2109 |
Um método público ou protegido de tratamento de eventos foi detectado.Os métodos de tratamento de eventos não devem ser expostos, a menos que seja absolutamente necessário. |
|
CA2111 |
Um ponteiro não é privado, interno ou somente leitura.Um código mal-intencionado pode alterar o valor do ponteiro, o que pode dar acesso a locais arbitrários na memória ou causar falhas no aplicativo ou no sistema. |
|
CA2112 |
Um tipo público ou protegido contém campos públicos e é protegido por exigências de vínculo.Se tiver acesso a uma instância de um tipo protegido por uma exigência de vínculo, o código não precisará atender à exigência de vínculo para acessar os campos do tipo. |
|
CA2114 |
CA2114: a segurança de método deve ser um superconjunto de tipo |
Um método não deve ter segurança declarativa no nível do método e no nível do tipo para a mesma ação. |
CA2115 |
CA2115: chamar GC.KeepAlive durante o uso de recursos nativos |
Esta regra detecta erros que podem ocorrer porque um recurso não gerenciado está sendo finalizado, enquanto ainda está sendo usado em código não gerenciado. |
CA2116 |
Quando APTCA AllowPartiallyTrustedCallersAttribute () estiver presente em um assembly totalmente confiável e o assembly executar código em outro assembly que não permita chamadores parcialmente confiáveis, será possível uma exploração de segurança. |
|
CA2117 |
Quando APTCA estiver presente em um assembly totalmente confiável e um tipo no assembly for herdado de um tipo que não permita chamadores parcialmente confiáveis, será possível uma exploração de segurança. |
|
CA2118 |
CA2118: revisar uso de SuppressUnmanagedCodeSecurityAttribute |
SuppressUnmanagedCodeSecurityAttribute altera o comportamento do sistema de segurança padrão para membros que executem código não gerenciado que usa interoperabilidade COM ou invocação do sistema operacional.Esse atributo é usado principalmente para aumentar o desempenho; no entanto, os ganhos de desempenho acompanham riscos de segurança significativos. |
CA2119 |
CA2119: os métodos para lacrar que atendam a interfaces privadas |
Um tipo público herdável fornece uma implementação de método substituível de uma interface (Friend no Visual Basic) interna.Para corrigir uma violação dessa regra, evite que o método seja substituído fora do assembly. |
CA2120 |
Esse tipo tem um construtor que utiliza um objeto System.Runtime.Serialization.SerializationInfo e um objeto System.Runtime.Serialization.StreamingContext (a assinatura do construtor de serialização).Esse construtor não é protegido por uma verificação de segurança, mas um ou mais dos construtores regulares no tipo são protegidos. |
|
CA2121 |
O sistema chama o construtor estático antes que a primeira instância do tipo seja criada ou que outros membros estáticos sejam referenciados.Se não for privado, um construtor estático poderá ser chamado por um código diferente do sistema.Dependendo das operações realizadas no construtor, isso pode causar um comportamento inesperado. |
|
CA2122 |
CA2122: não expor indiretamente métodos com demandas de link |
Um membro público ou protegido tem exigências de vínculo e é chamado por um membro que não realiza nenhuma verificação de segurança.Uma exigência de vínculo verifica as permissões apenas do chamador imediato. |
CA2123 |
CA2123: as demandas de link de substituição devem ser idênticas à base |
Esta regra compara um método ao método de base, que é uma interface ou um método virtual em outro tipo e, em seguida, compara as exigências de vínculo em cada um.Se essa regra for violada, um chamador mal-intencionado poderá ignorar a exigência de vínculo apenas chamando o método não seguro. |
CA2124 |
CA2124: encapsular cláusulas finalmente vulneráveis em tentativa externa |
Um método público ou protegido contém um bloco try/finally.O bloco finally aparentemente redefine o estado de segurança não está incluído em um bloco finally. |
CA2126 |
Um tipo sem lacre público é protegido usando-se uma exigência de link e tem um método substituível.Nem o tipo nem o método é protegido usando-se uma exigência de herança. |
|
CA2127 |
CA2136: os membros não devem ter anotações de transparência conflitantes |
O código crítico não pode ocorrer em um assembly 100 por cento transparente.Esta regra analisa assemblies 100 por cento transparentes em busca de todas as anotações de SecurityCritical nos níveis de tipo, campo e método. |
CA2128 |
CA2147: os métodos transparentes talvez não usem declarações de segurança |
Esta regra analisa todos os métodos e tipos em um assembly que seja 100 por cento transparente ou transparente/crítico misto e sinaliza o uso declarativo ou obrigatório de Assert. |
CA2129 |
CA2140: o código transparente não deve fazer referência a itens críticos de segurança |
Métodos que são marcados por SecurityTransparentAttribute chamam membros públicos marcados como SecurityCritical.Esta regra analisa todos os métodos e tipos em um assembly que seja transparente/crítico misto, e sinaliza todas as chamadas de código transparente para o código crítico não público que não estejam marcadas como SecurityTreatAsSafe. |
CA2130 |
CA2130: as constantes críticas de segurança devem ser transparentes |
A imposição de transparência não é imposta para valores constantes porque compiladores têm valores constantes internos de modo que nenhuma pesquisa seja necessária no tempo de execução.Os campos constantes devem ter segurança transparente de forma que os revisores de código não pressuponham que o código transparente não pode acessar a constante. |
CA2131 |
CA2131: os tipos críticos de segurança podem não participar da equivalência de tipo |
Um tipo participa da equivalência do tipo e o próprio tipo, ou um membro ou campo do tipo, é marcado usando-se o atributo SecurityCriticalAttribute.Esta regra ocorre em qualquer tipo crítico ou em tipos que contenham métodos críticos ou campos que estejam participando da equivalência do tipo.Ao detectar um tipo assim, o CLR não o carrega com um TypeLoadException em tempo de execução.Normalmente, essa regra só é acionada quando usuários implementam equivalência de tipo manualmente, em vez de depender de tlbimp e dos compiladores para fazer a equivalência do tipo. |
CA2132 |
CA2132: os construtores padrão devem ser pelo menos críticos como construtores padrão do tipo base |
Os tipos e os membros que têm o SecurityCriticalAttribute não podem ser usados pelo código de aplicativo do Silverlight.Os tipos de segurança crítica e os membros só podem ser usados por código confiável no .NET Framework para a biblioteca de classes do Silverlight.Como uma construção pública ou protegida em uma classe derivada deve ter a mesma transparência maior que sua classe base, uma classe em um aplicativo não pode ser derivada de uma classe marcada como SecurityCritical. |
CA2133 |
CA2133: os representantes devem ser associados a métodos com transparência consistente |
Esse aviso é acionado em um método que associa um representante que foi marcado usando-se o SecurityCriticalAttribute para um método transparente ou marcado usando-se SecuritySafeCriticalAttribute.O aviso também é acionado em um método que associa um representante transparente ou de segurança crítica a um método crítico. |
CA2134 |
Essa regra é acionada quando um método marcado usando-se o SecurityCriticalAttribute substitui um método transparente ou marcado usando-se SecuritySafeCriticalAttribute.A regra também é acionada quando um método transparente ou marcado usando-se SecuritySafeCriticalAttribute substitui um método marcado usando-se um SecurityCriticalAttribute.A regra é aplicada durante a substituição de um método virtual ou a implementação de uma interface. |
|
CA2135 |
CA2135: os assemblies de nível 2 não devem conter LinkDemands |
LinkDemands são preteridos no conjunto de regras de segurança nível 2.Em vez de usar LinkDemands para impor a segurança em tempo de compilação JIT, marque os métodos, os tipos e os campos usando o atributo SecurityCriticalAttribute. |
CA2136 |
CA2136: os membros não devem ter anotações de transparência conflitantes |
Os atributos de transparência são aplicados com base nos elementos de código de escopo maior a elementos de escopo menor.Os atributos de transparência dos elementos de código que têm escopo maior têm precedência sobre atributos de transparência dos elementos de código contidos no primeiro elemento.Por exemplo, uma classe marcada usando-se o atributo SecurityCriticalAttribute não pode conter um método marcado usando-se o atributo SecuritySafeCriticalAttribute. |
CA2137 |
CA2137: os métodos transparentes só devem conter IL verificável |
Um método contém código não verificável ou retorna um tipo por referência.Esta regra é acionada em tentativas por código transparente de segurança para executar MISL (Microsoft Intermediate Language) não verificável.Entretanto, a regra não contém um verificador de IL completo e, em vez disso, usa heurística para capturar a maioria das violações de verificação de MSIL. |
CA2138 |
Um método de segurança transparente chama um método marcado usando-se o atributo SuppressUnmanagedCodeSecurityAttribute. |
|
CA2139 |
CA2139: os métodos transparentes talvez não usem o atributo HandleProcessCorruptingExceptions |
Esta regra é acionada por qualquer método que seja transparente e tenta tratar uma exceção de corrompimento de processo usando o atributo HandleProcessCorruptedStateExceptionsAttribute.Uma exceção de corrompimento de processo é uma classificação de exceção do CLR versão 4.0 de exceções, como AccessViolationException.O atributo HandleProcessCorruptedStateExceptionsAttribute só pode ser usado por métodos de segurança crítica e será ignorado se for aplicado a um método transparente. |
CA2140 |
CA2140: o código transparente não deve fazer referência a itens críticos de segurança |
Um elemento de código marcado usando-se o atributo SecurityCriticalAttribute é crítico para segurança.Um método transparente não pode usar um elemento crítico para segurança.Se um tipo transparente tentar usar um tipo crítico de segurança, um TypeAccessException, um MethodAccessException ou um FieldAccessException será acionado. |
CA2141 |
Um método transparente de segurança chama um método em um assembly que não foi marcado usando-se o APTCA ou um método transparente de segurança atende a um LinkDemand para um tipo ou um método. |
|
CA2142 |
CA2142: o código transparente não deve ser protegido com LinkDemands |
Esta regra é acionada em métodos transparentes que exigem LinkDemands para serem acessados.O código transparente de segurança não deve ser responsável por verificar a segurança de uma operação e, assim, não deve exigir permissões. |
CA2143 |
CA2143: os métodos transparentes não devem usar demandas de segurança |
O código transparente de segurança não deve ser responsável por verificar a segurança de uma operação e, assim, não deve exigir permissões.O código transparente de segurança deve usar demandas completas para tomar decisões de segurança e o código crítico de segurança não deve confiar no código transparente para fazer a demanda completa. |
CA2144 |
CA2144: o código transparente não deve carregar assemblies a partir de matrizes de bytes |
A revisão de segurança para o código transparente não é tão completo quanto a revisão de segurança para o código crítico porque o código transparente não pode realizar ações confidenciais de segurança.Os assemblies carregados a partir de uma matriz de bytes podem não ser observados no código transparente e essa matriz de bytes pode conter código crítico ou código crítico de segurança mais importante, que precisa ser auditado. |
CA2145 |
Os métodos decorados pelo atributo SuppressUnmanagedCodeSecurityAttribute têm um LinkDemand implícito colocado em qualquer método que o chame.Este LinkDemand requer que o código de chamada seja crítico de segurança.A marcação do método que usa SuppressUnmanagedCodeSecurity usando o atributo SecurityCriticalAttribute torna esse requisito mais óbvio para chamadores do método. |
|
CA2146 |
CA2146: tipos devem ser pelo menos críticos como tipos base e interfaces |
Esta regra é acionada quando um tipo derivado tem um atributo de transparência de segurança que não é tão crítico quanto seu tipo de base ou interface implementada.Apenas os tipos críticos podem derivar os tipos de base críticos ou implementar interfaces críticos, e apenas os tipos críticos ou de segurança crítica podem derivar dos tipos de base críticos de segurança ou implementar interfaces críticas de segurança. |
CA2147 |
CA2147: os métodos transparentes talvez não usem declarações de segurança |
O código que é marcado como SecurityTransparentAttribute não recebe permissões suficientes para declarar. |
CA2149 |
CA2149: os métodos transparentes não devem chamar código nativo |
Esta regra é aciona em qualquer método transparente chamado diretamente no código nativo (por exemplo, por meio de um P/Invoke).As violações dessa regra resultam em um MethodAccessException no modelo de transparência de nível 2 e uma demanda completa para UnmanagedCode no modelo de transparência de nível 1. |
CA2151 |
CA2151: campos com tipos críticos devem ser críticos para segurança |
Para usar tipos de segurança crítica, o código que faz referência ao tipo deve ser de segurança crítica ou de segurança crítica segura.Isso será verdadeiro mesmo que a referência seja indireta.Por isso, ter um campo de segurança transparente ou de segurança crítica é enganoso porque o código transparente continuará incapaz de acessar o campo. |
CA2200 |
Uma exceção é lançada novamente e a exceção é especificada explicitamente na instrução throw.Se uma exceção for lançada novamente pela especificação da 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 |
Isso torna o erro original difícil de detectar e depurar. |
|
CA2202 |
Uma implementação do método contém caminhos de código que poderiam causar várias chamadas para System.IDisposable.Dispose ou para um equivalente a Dispose (como um método Close() em alguns tipos) no mesmo objeto. |
|
CA2204 |
CA2204: os literais do recurso devem ter a ortografia correta |
Uma cadeia de caracteres literal em um corpo de método contém uma ou mais palavras não reconhecidas pela biblioteca do verificador ortográfico da Microsoft. |
CA2205 |
Um método de invocação do sistema operacional é definido e um método com a funcionalidade equivalente está localizado na biblioteca de classes do .NET Framework. |
|
CA2207 |
CA2207: inicializar campos estáticos de tipo de valor embutido |
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 declarados e remova o construtor estático. |
CA2208 |
For feita uma chamada para o construtor padrão (sem parâmetros) de um tipo de exceção que seja ou derive de ArgumentException, ou um argumento de cadeia de caracteres incorreto é passado para um construtor com parâmetros de um tipo de exceção que seja ou derive de ArgumentException. |
|
CA2210 |
O nome forte protege clientes do carregamento desconhecido de um assembly adulterado.Os assemblies sem nomes fortes não devem ser implantados fora de cenários muito limitados.Se você compartilhar ou distribuir assemblies não assinados corretamente, o assembly poderá ser adulterado, o Common Language Runtime poderá não carregar o assembly ou o usuário talvez precise desabilitar a verificação em seu computador. |
|
CA2211 |
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 controlado cuidadosamente e exige técnicas de programação avançadas para sincronizar o acesso ao objeto da classe. |
|
CA2212 |
Um método em um tipo herdado de System.EnterpriseServices.ServicedComponent é marcado usando-se System.Web.Services.WebMethodAttribute.Como WebMethodAttribute e um método ServicedComponent têm comportamento e requisitos conflitantes para o contexto e o fluxo de transações, o comportamento do método estará incorreto em alguns cenários. |
|
CA2213 |
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 |
Ao chamar um método virtual, o construtor da instância que invoca o método pode não ter sido executado. |
|
CA2215 |
CA2215: os métodos de descarte devem chamar o descarte da classe base |
Se for herdado de um tipo descartável, um tipo deverá chamar o método Dispose do tipo de base em seu próprio método Dispose. |
CA2216 |
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 |
Uma enumeração visível externamente é marcada usando-se 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 |
CA2218: substituir GetHashCode em igualdades de substituição |
GetHashCode retorna um valor, com base na instância atual, adequado para algoritmos de hash e estruturas de dados como uma tabela de hash.Dois objetos que tenham o mesmo tipo e sejam iguais devem retornar o mesmo código hash. |
CA2219 |
Quando uma exceção é acionada em uma cláusula finally ou fault, a nova exceção oculta a exceção ativa.Quando uma exceção é acionada em uma cláusula de filtro, o tempo de execução captura silenciosamente a exceção.Isso torna o erro original difícil de detectar e depurar. |
|
CA2220 |
CA2220: os finalizadores devem chamar o finalizador da classe base |
A finalização deve ser propagada em toda a hierarquia de herança.Para garantir isso, os tipos devem chamar o método Finalize de classe base em seu próprio método Finalize. |
CA2221 |
Os finalizadores deve usar o modificador de acesso da família. |
|
CA2222 |
Você não deve alterar o modificador de acesso para membros herdados.A alteração de um membro herdado para particular não impede que os chamadores acessem a implementação da classe base do método. |
|
CA2223 |
CA2223: os membros devem ser diferentes além do tipo de retorno |
Embora o Common Language Runtime permita o uso de tipos de retorno na diferenciação de membros outrora idênticos, este recurso não está na CLS nem é um recurso comum das linguagens de programação do .NET. |
CA2224 |
CA2224: substituir igualdades em igualdades de operador de sobrecarga |
Um tipo público implementa o operador de igualdade, mas não substitui Object.Equals. |
CA2225 |
CA2225: as sobrecargas do operador têm alternativas nomeadas |
Uma sobrecarga de operador foi detectada, 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 programem em linguagens que não dão suporte a operadores sobrecarregados. |
CA2226 |
Um tipo implementa o operador de igualdade ou de desigualdade e não implementa o operador oposto. |
|
CA2227 |
CA2227: as propriedades de coleção devem ser somente leitura |
Uma propriedade collection gravável permite que um usuário substitua a coleção por uma coleção diferente.Uma propriedade somente leitura evita que a coleção seja substituída, mas ainda permite que membros individuais sejam definidos. |
CA2228 |
Arquivos de recursos que foram compilados usando-se versões de pré-lançamento do .NET Framework não podem ser utilizados por versões compatíveis com o .NET Framework. |
|
CA2229 |
Para corrigir uma violação dessa regra, implemente o construtor de serialização.Para uma classe lacrada, torne o construtor particular; do contrário, deixe-o protegido. |
|
CA2230 |
Um tipo público ou protegido contém um método público ou protegido que usa a convenção de chamada VarArgs, em vez da palavra-chave params. |
|
CA2231 |
CA2231: sobrecarregar igualdades de operador em ValueType.Equals substituídos |
Um tipo de valor substitui Object.Equals, mas não implementa o operador de igualdade. |
CA2232 |
CA2232: marcar pontos de entrada dos Windows Forms com STAThread |
STAThreadAttribute indica que o modelo de threading COM para o aplicativo é um single-threaded apartment.Esse atributo deve estar presente no ponto de entrada de qualquer aplicativo que use o Windows Forms; se ele for omitido, os componentes do Windows poderão não funcionar corretamente. |
CA2233 |
Você não deve realizar operações aritméticas sem primeiro validar os operandos.Isso garante que o resultado da operação não esteja fora do intervalo de valores possíveis para os tipos de dados que estão envolvidos. |
|
CA2234 |
CA2234: passar objetos System.Uri em vez de cadeias de caracteres |
Foi feita uma chamada para um método com um parâmetro de cadeia de caracteres cujo nome contém "uri", "URI", "urn", "URN", "url" ou "URL".O tipo declarante do método contém uma sobrecarga do método correspondente que possui um parâmetro System.Uri. |
CA2235 |
Um campo de instância de um tipo que não seja serializável é declarado em um tipo que é serializável. |
|
CA2236 |
CA2236: chamar métodos de classe base em tipos ISerializable |
Para corrigir uma violação dessa regra, chame o método GetObjectData de tipo base ou o construtor de serialização do método de tipo derivado correspondente ou do construtor. |
CA2237 |
CA2237: marcar tipos ISerializable com SerializableAttribute |
Para serem reconhecidos pelo Common Language Runtime como serializáveis, os tipos devem ser marcados usando-se o atributo SerializableAttribute, mesmo quando o tipo usa uma rotina de serialização personalizada por meio da implementação da interface ISerializable. |
CA2238 |
Um método que trata um evento de serialização não tem a assinatura, o tipo de retorno ou a visibilidade corretos. |
|
CA2239 |
CA2239: fornecer métodos de desserialização para campos opcionais |
Um tipo tem um campo que foi marcado usando-se o atributo System.Runtime.Serialization.OptionalFieldAttribute, e o tipo não fornece métodos de tratamento de eventos de desserialização. |
CA2240 |
Para corrigir uma violação dessa regra, deixe o método GetObjectData visível e substituível e verifique se todos os campos de instância estão incluídos no processo de serialização ou marcados explicitamente usando-se o atributo NonSerializedAttribute. |
|
CA2241 |
CA2241: fornecer argumentos corretos para métodos de formatação |
O argumento format passado para System.String.Format não contém um item de formato correspondente a cada argumento do objeto ou vice-versa. |
CA2242 |
Essa expressão testa um valor em Single.Nan ou Double.Nan.Use Single.IsNan (único) ou Double.IsNan (duplo) para testar o valor. |
|
CA2243 |
CA2243: os literais da cadeia de caracteres de atributo devem ser analisados corretamente |
O parâmetro literal da cadeia de caracteres de um atributo não é analisado corretamente para uma URL, um GUID ou uma versão. |
CA5122 |
CA5122: declarações P/Invoke não devem ser críticas para segurança |
Os métodos são marcados como SecuritySafeCritical quando executam uma operação confidencial de segurança, mas também são seguros para serem usados pelo código transparente.O código transparente jamais pode chamar diretamente o código nativo por meio de um P/Invoke.Por isso, a marcação de um P/Invoke como crítico de segurança não permitirá que o código transparente o chame, e é enganosa na análise de segurança. |