Compartilhar via


CA1422: validar a compatibilidade da plataforma – APIs obsoletas

Propriedade Valor
ID da regra CA1422
Título Validar a compatibilidade da plataforma – APIs obsoletas
Categoria Interoperabilidade
Correção interruptiva ou sem interrupção Inquebrável
Habilitado por padrão no .NET 10 Como aviso
Idiomas aplicáveis C# e Visual Basic

Causa

Uma API marcada com ObsoletedOSPlatformAttribute é chamada de um site de chamada marcado como compatível com o sistema operacional (SO) obsoleto. Essa regra é semelhante a CA1416: validar a compatibilidade da plataforma, mas ela avisa sobre APIs obsoletas em uma determinada plataforma versus sem suporte total.

Descrição da regra

Não é recomendável chamar uma API obsoleta em um determinado sistema operacional (versão) a partir de um ponto de chamada acessível nesse sistema operacional (versão). Em vez disso, considere chamar uma API não obsoleta ou prevenir a chamada da API obsoleta em sistemas operacionais afetados.

Como corrigir violações

Há várias maneiras de corrigir uma violação dessa regra:

Exemplo

O seguinte snippet de código mostra uma violação de CA1422:

[SupportedOSPlatform("Windows")]
public void M1()
{
    // Violates rule CA1422.
    // This call site is reachable on 'Windows',
    // but 'ObsoletedOnWindows62()'
    // is obsoleted on 'Windows 6.2' and later.
    ObsoletedOnWindows62();
}

[ObsoletedOSPlatform("Windows6.2")]
public void ObsoletedOnWindows62()
{ }
<SupportedOSPlatform("Windows")>
Public Sub M1()
    ' Violates rules CA1422.
    ' This call site is reachable on 'Windows',
    ' but 'ObsoletedOnWindows62()'
    ' is obsoleted on 'Windows 6.2' and later.
    ObsoletedOnWindows62()
End Sub

<ObsoletedOSPlatform("Windows6.2")>
Public Sub ObsoletedOnWindows62()
End Sub

O snippet de código a seguir corrige a violação adicionando ao site de chamada um atributo UnsupportedOSPlatformAttribute que especifica a versão em que o método chamado estava obsoleto.

[SupportedOSPlatform("Windows")]
[ObsoletedOSPlatform("Windows6.2")]
public void M1()
{
    ObsoletedOnWindows62();
}

[ObsoletedOSPlatform("Windows6.2")]
public void ObsoletedOnWindows62()
{ }
<SupportedOSPlatform("Windows")>
<ObsoletedOSPlatform("Windows6.2")>
Public Sub M1()
    ObsoletedOnWindows62()
End Sub

<ObsoletedOSPlatform("Windows6.2")>
Public Sub ObsoletedOnWindows62()
End Sub

Quando suprimir avisos

É seguro suprimir um aviso dessa regra se você não está preocupado em chamar uma API obsoleta ou se sabe que a API obsoleta nunca será chamada na versão do sistema operacional afetada.

Suprimir um aviso

Para suprimir apenas uma violação, adicione diretivas de pré-processador ao arquivo de origem a fim de desabilitar e, em seguida, reabilitar a regra.

#pragma warning disable CA1422
// The code that's violating the rule is on this line.
#pragma warning restore CA1422

Para desabilitar a regra em um arquivo, uma pasta ou um projeto, defina a severidade como none no arquivo de configuração.

[*.{cs,vb}]
dotnet_diagnostic.CA1422.severity = none

Para desabilitar toda essa categoria de regras, defina a gravidade da categoria como none no arquivo de configuração.

[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Interoperability.severity = none

Para obter mais informações, confira Como suprimir avisos de análise de código.

Confira também