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:

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.

Consulte también