CA1422: Überprüfen der Plattformkompatibilität – veraltete APIs
Eigenschaft | Wert |
---|---|
Regel-ID | CA1422 |
Titel | Überprüfen der Plattformkompatibilität – veraltete APIs |
Kategorie | Interoperabilität |
Fix führt oder führt nicht zur Unterbrechung | Nicht unterbrechend |
Standardmäßig in .NET 9 aktiviert | Als Warnung |
Ursache
Eine API, die mit ObsoletedOSPlatformAttribute gekennzeichnet ist, wird von einer Aufrufsite aufgerufen, die als Unterstützung des veralteten Betriebssystems gekennzeichnet ist. Diese Regel ähnelt CA1416: Validierung der Plattformkompatibilität, mit dem Unterschied, dass sie vor APIs warnt, die auf einer bestimmten Plattform veraltet sind, statt solchen, die überhaupt nicht unterstützt werden.
Regelbeschreibung
Das Aufrufen einer API, die in einem bestimmten Betriebssystem (Version) veraltet ist, von einer Aufrufsite aus, die von diesem Betriebssystem (Version) aus erreichbar ist, wird nicht empfohlen. Erwägen Sie stattdessen den Aufruf einer nicht veralteten API, oder schützen Sie sich vor dem Aufruf der veralteten API auf betroffenen Betriebssystemen.
Behandeln von Verstößen
Es gibt verschiedene Möglichkeiten, einen Verstoß gegen diese Regel zu beheben:
- Beschränken Sie die Aufrufsite auf Betriebssysteme, die die veraltete Version nicht enthalten, indem Sie sie mit UnsupportedOSPlatformAttribute oder ObsoletedOSPlatformAttribute markieren.
- Schützen Sie den Aufruf mithilfe von System.OperatingSystem-APIs, z. B.
if (!OperatingSystem.IsLinux())
. - Schützen Sie den Aufruf mithilfe einer API, die ein UnsupportedOSPlatformGuardAttribute oder negiertes SupportedOSPlatformGuardAttribute als Anmerkung erhält.
Beispiel
Der folgende Codeschnipsel zeigt eine Verletzung von 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
Der folgende Codeschnipsel behebt die Verletzung, indem der Aufrufsite ein UnsupportedOSPlatformAttribute-Attribut hinzugefügt wird, das die Version angibt, ab der die aufgerufene Methode als veraltet gilt.
[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
Wann sollten Warnungen unterdrückt werden?
Es ist sicher, eine Warnung von dieser Regel zu unterdrücken, wenn Sie keine Bedenken haben, eine veraltete API aufzurufen, oder wenn Sie wissen, dass die veraltete API nie in der betroffenen Betriebssystemversion aufgerufen wird.
Unterdrücken einer Warnung
Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.
#pragma warning disable CA1422
// The code that's violating the rule is on this line.
#pragma warning restore CA1422
Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad in der Konfigurationsdatei auf none
fest.
[*.{cs,vb}]
dotnet_diagnostic.CA1422.severity = none
Um diese gesamte Kategorie von Regeln zu deaktivieren, legen Sie den Schweregrad für die Kategorie in der Konfigurationsdatei auf none
fest.
[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Interoperability.severity = none
Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.