CA1422: Validación de la compatibilidad con las plataformas: API obsoletas
Propiedad | Value |
---|---|
Identificador de la regla | CA1422 |
Título | Validación de la compatibilidad con las plataformas: API obsoletas |
Categoría | Interoperabilidad |
La corrección es problemática o no problemática | Poco problemático |
Habilitado de forma predeterminada en .NET 8 | Como advertencia |
Causa
Se llama a una API marcada con ObsoletedOSPlatformAttribute desde un sitio de llamada marcado como compatible con el sistema operativo (SO) obsoleto. Esta regla es similar a CA1416: Validación de la compatibilidad con las plataformas, salvo que advierte sobre las API que están obsoletas en una plataforma determinada frente a las no admitidas por completo.
Descripción de la regla
No se recomienda llamar a una API obsoleta en un sistema operativo determinado (versión) desde un sitio de llamada al que se puede acceder desde ese sistema operativo (versión). Considere la posibilidad de llamar a una API no obsoleta o protegerse de llamar a la API obsoleta en los sistemas operativos afectados.
Cómo corregir infracciones
Hay varias maneras de corregir una infracción de esta regla:
- Restrinja el sitio de llamada a sistemas operativos que no incluyan la versión obsoleta marcándola con UnsupportedOSPlatformAttribute o ObsoletedOSPlatformAttribute.
- Guarde la llamada mediante las API System.OperatingSystem; por ejemplo,
if (!OperatingSystem.IsLinux())
. - Proteja la llamada mediante una API anotada con UnsupportedOSPlatformGuardAttribute o SupportedOSPlatformGuardAttribute negativo.
Ejemplo
El siguiente fragmento de código muestra una infracción de la regla 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
El siguiente fragmento de código corrige la infracción agregando al sitio de llamada un atributo UnsupportedOSPlatformAttribute que especifica la versión en la que el método llamado estaba 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
Cuándo suprimir las advertencias
Se puede suprimir una advertencia de esta regla si no le preocupa llamar a una API obsoleta o si sabe que nunca se llamará a la API obsoleta en la versión del sistema operativo afectado.
Supresión de una advertencia
Si solo quiere suprimir una única infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y volver a habilitar la regla.
#pragma warning disable CA1422
// The code that's violating the rule is on this line.
#pragma warning restore CA1422
Para deshabilitar la regla de un archivo, una carpeta o un proyecto, establezca su gravedad en none
del archivo de configuración.
[*.{cs,vb}]
dotnet_diagnostic.CA1422.severity = none
Para deshabilitar toda esta categoría de reglas, establezca la gravedad de la categoría en none
del archivo de configuración.
[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Interoperability.severity = none
Para obtener más información, consulte Procedimiento para suprimir advertencias de análisis de código.