CA1422: validar a compatibilidade da plataforma – APIs obsoletas

Property Valor
ID da regra CA1422
Título Validar a compatibilidade da plataforma – APIs obsoletas
Categoria Interoperabilidade
Correção interruptiva ou sem interrupção Sem interrupção
Habilitado por padrão no .NET 8 Como aviso

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 de obsoleta em um determinado sistema operacional (versão) de um site de chamada acessível por meio desse sistema operacional (versão). Em vez disso, considere chamar uma API não obsoleta ou proteger contra chamar a 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