CA1422: Verifiera plattformskompatibilitet – föråldrade API:er
Property | Värde |
---|---|
Regel-ID | CA1422 |
Title | Verifiera plattformskompatibilitet – föråldrade API:er |
Kategori | Samverkan |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Som varning |
Orsak
Ett API som är markerat med ObsoletedOSPlatformAttribute anropas från en anropsplats som har markerats som stöd för det föråldrade operativsystemet (OS). Den här regeln liknar CA1416: Validera plattformskompatibilitet förutom att den varnar för API:er som är föråldrade på en viss plattform jämfört med som inte stöds helt.
Regelbeskrivning
Det rekommenderas inte att anropa ett API som är föråldrat i ett visst operativsystem (version) från en anropsplats som kan nås från operativsystemet (versionen). Överväg att anropa ett icke-föråldrat API i stället, eller skydda mot att anropa det föråldrade API:et på berörda operativsystem.
Så här åtgärdar du överträdelser
Det finns olika sätt att åtgärda ett brott mot den här regeln:
- Begränsa anropsplatsen till operativsystem som inte innehåller den föråldrade versionen genom att markera den med UnsupportedOSPlatformAttribute eller ObsoletedOSPlatformAttribute.
- Skydda anropet med api System.OperatingSystem :er, till exempel
if (!OperatingSystem.IsLinux())
. - Skydda anropet med hjälp av ett API som kommenteras med UnsupportedOSPlatformGuardAttribute eller negeras SupportedOSPlatformGuardAttribute.
Exempel
Följande kodfragment visar ett brott mot 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
Följande kodfragment åtgärdar överträdelsen genom att lägga till ett UnsupportedOSPlatformAttribute attribut på anropswebbplatsen som anger vilken version som den anropade metoden var föråldrad i.
[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
När du ska ignorera varningar
Det är säkert att ignorera en varning från den här regeln om du inte är orolig för att anropa ett föråldrat API, eller om du vet att det föråldrade API:et aldrig kommer att anropas på den berörda OS-versionen.
Ignorera en varning
Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.
#pragma warning disable CA1422
// The code that's violating the rule is on this line.
#pragma warning restore CA1422
Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none
i konfigurationsfilen.
[*.{cs,vb}]
dotnet_diagnostic.CA1422.severity = none
Om du vill inaktivera hela den här regelkategorin anger du allvarlighetsgraden för kategorin till none
i konfigurationsfilen.
[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Interoperability.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.