CA1041: Fornecer a mensagem ObsoleteAttribute

Property Valor
ID da regra CA1041
Título Fornecer a mensagem ObsoleteAttribute
Categoria Projetar
Correção interruptiva ou sem interrupção Sem interrupção
Habilitado por padrão no .NET 8 Como sugestão

Causa

Um tipo ou membro é marcado usando um atributo System.ObsoleteAttribute que não tem sua propriedade System.ObsoleteAttribute.Message especificada.

Por padrão, esta regra analisa apenas os tipos e membros visíveis externamente, mas isso é configurável.

Descrição da regra

ObsoleteAttribute é usado para marcar membros e tipos de biblioteca preteridos. Os consumidores da biblioteca devem evitar o uso de qualquer tipo ou membro marcado como obsoleto. Isso ocorre porque ele pode não ter suporte e, eventualmente, será removido das versões posteriores da biblioteca. 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 o membro obsoleto. Essas informações geralmente incluem por quanto tempo o tipo ou membro obsoleto será suportado pelos designers da biblioteca e a substituição preferencial a ser usada.

Como corrigir violações

Para corrigir uma violação dessa regra, adicione o parâmetro message ao construtor ObsoleteAttribute.

Quando suprimir avisos

Não suprima um aviso desta regra porque a propriedade Message fornece informações críticas sobre o tipo ou membro obsoleto.

Configurar código para analisar

Use a opção a seguir para configurar em quais partes da base de código essa regra deve ser executada.

Você pode configurar essa opção apenas para essa regra, para todas as regras às quais ela se aplica ou para todas as regras nessa categoria (Design) às quais ela se aplica. Para saber mais, confira Opções de configuração de regra de qualidade de código.

Incluir superfícies de API específicas

É possível configurar em quais partes da base de código essa regra deverá ser executada, com base na acessibilidade. Por exemplo, para especificar que a regra deverá ser executada apenas na superfície de API não pública, adicione o seguinte par chave-valor a um arquivo .editorconfig no projeto:

dotnet_code_quality.CAXXXX.api_surface = private, internal

Exemplo

O exemplo a seguir mostra um membro obsoleto que tem um ObsoleteAttribute declarado corretamente.

[ObsoleteAttribute("This property is obsolete and will be removed in a " +
"future version. Use the FullName property instead.", false)]
public string Name
{
    get => "Name";
}
Imports System

Namespace ca1041

    Public Class ObsoleteAttributeOnMember

        <ObsoleteAttribute("This property is obsolete and will " &
             "be removed in a future version. Use the FirstName " &
             "and LastName properties instead.", False)>
        ReadOnly Property Name As String
            Get
                Return "Name"
            End Get
        End Property

        ReadOnly Property FirstName As String
            Get
                Return "FirstName"
            End Get
        End Property

        ReadOnly Property LastName As String
            Get
                Return "LastName"
            End Get
        End Property

    End Class

End Namespace

Confira também