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 8 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:

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.

Se även