Condividi tramite


CA1422: Convalidare la compatibilità della piattaforma - API obsolete

Proprietà valore
ID regola CA1422
Title Convalidare la compatibilità della piattaforma - API obsolete
Categoria Interoperabilità
Correzione che causa un'interruzione o un'interruzione Nessuna interruzione
Abilitato per impostazione predefinita in .NET 8 Come avviso

Causa

Un'API contrassegnata con ObsoletedOSPlatformAttribute viene chiamata da un sito di chiamata contrassegnato come supporto del sistema operativo obsoleto. Questa regola è simile a CA1416: convalidare la compatibilità della piattaforma, ad eccezione del fatto che avvisa le API obsolete in una determinata piattaforma rispetto a quelle non supportate completamente.

Descrizione regola

Non è consigliabile chiamare un'API obsoleta in un determinato sistema operativo (versione) da un sito di chiamata raggiungibile da tale sistema operativo (versione). Prendere invece in considerazione la chiamata a un'API non obsoleta o a evitare di chiamare l'API obsoleta nei sistemi operativi interessati.

Come correggere le violazioni

Esistono diversi modi per correggere una violazione di questa regola:

Esempio

Il frammento di codice seguente mostra una violazione di 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

Il frammento di codice seguente corregge la violazione aggiungendo al sito di chiamata un UnsupportedOSPlatformAttribute attributo che specifica la versione in cui il metodo chiamato è 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 eliminare gli avvisi

È possibile eliminare un avviso da questa regola se non si è interessati a chiamare un'API obsoleta o se si sa che l'API obsoleta non verrà mai chiamata sulla versione interessata del sistema operativo.

Eliminare un avviso

Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.

#pragma warning disable CA1422
// The code that's violating the rule is on this line.
#pragma warning restore CA1422

Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità none su nel file di configurazione.

[*.{cs,vb}]
dotnet_diagnostic.CA1422.severity = none

Per disabilitare questa intera categoria di regole, impostare la gravità per la categoria su none nel file di configurazione.

[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Interoperability.severity = none

Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.

Vedi anche