Partilhar via


Regras de fiabilidade

As regras de confiabilidade suportam a confiabilidade da biblioteca e do aplicativo, como o uso correto de memória e thread. As regras de fiabilidade incluem:

Regra Description
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.
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 chame 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 se saiba que ele foi 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 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 CancellationToken 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 para Buffer.BlockCopy deve especificar o número de bytes a serem copiados Ao usar Buffer.BlockCopyo , o argumento especifica o count número de bytes a serem copiados. Você só deve usar Array.Length para o count argumento em matrizes cujos elementos têm 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.