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 9 | 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:
- Restrinja o site de chamada a sistemas operacionais que não incluem a versão obsoleta marcando-a com UnsupportedOSPlatformAttribute ou ObsoletedOSPlatformAttribute.
- Proteja a chamada usando APIs System.OperatingSystem, por exemplo,
if (!OperatingSystem.IsLinux())
. - Proteja a chamada usando uma API anotada com UnsupportedOSPlatformGuardAttribute ou SupportedOSPlatformGuardAttribute negada.
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.