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