Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
| 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:
- 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 uma API onde 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.