CA1422: Convalidare la compatibilità della piattaforma - API obsolete
Proprietà | valore |
---|---|
ID regola | CA1422 |
Title | Convalidare la compatibilità della piattaforma - API obsolete |
Categoria | Interoperabilità |
La correzione causa un'interruzione o meno | Non causa un'interruzione |
Abilitato per impostazione predefinita in .NET 9 | 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:
- Limitare il sito di chiamata ai sistemi operativi che non includono la versione obsoleta contrassegnandola con UnsupportedOSPlatformAttribute o ObsoletedOSPlatformAttribute.
- Proteggere la chiamata usando System.OperatingSystem le API,
if (!OperatingSystem.IsLinux())
ad esempio . - Proteggere la chiamata usando un'API annotata con UnsupportedOSPlatformGuardAttribute o negata SupportedOSPlatformGuardAttribute.
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.