Partilhar via


CA1422: Validar compatibilidade de plataforma - APIs obsoletas

Property valor
ID da regra CA1422
Título Validar compatibilidade de plataforma - APIs obsoletas
Categoria Interoperabilidade
A correção está quebrando ou não quebrando Sem quebra
Habilitado por padrão no .NET 8 Como aviso

Motivo

Uma API marcada com ObsoletedOSPlatformAttribute é chamada a partir de um site de chamada marcado como suportando o sistema operacional (SO) obsoleto. Esta regra é semelhante à CA1416: Validar compatibilidade de plataforma, exceto que ela avisa sobre APIs que estão obsoletas em uma determinada plataforma versus totalmente sem suporte.

Descrição da regra

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

Como corrigir violações

Existem várias maneiras de corrigir uma violação desta regra:

Exemplo

O trecho de código a seguir 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 trecho de código a seguir corrige a violação adicionando ao site de chamada um UnsupportedOSPlatformAttribute atributo 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 desta regra se você não estiver preocupado em chamar uma API obsoleta ou se souber que a API obsoleta nunca será chamada na versão afetada do sistema operacional.

Suprimir um aviso

Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar 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 para um arquivo, pasta ou projeto, defina sua severidade como none no arquivo de configuração.

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

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

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

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

Consulte também