CA1422: Platformcompatibiliteit valideren - verouderde API's
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA1422 |
Titel | Platformcompatibiliteit valideren - verouderde API's |
Categorie | Interoperabiliteit |
Oplossing is brekend of niet-brekend | Niet-brekend |
Standaard ingeschakeld in .NET 9 | Als waarschuwing |
Oorzaak
Een API die is gemarkeerd met ObsoletedOSPlatformAttribute , wordt aangeroepen vanaf een aanroepsite die is gemarkeerd als ondersteuning voor het verouderde besturingssysteem (OS). Deze regel is vergelijkbaar met CA1416: Platformcompatibiliteit valideren, behalve dat deze waarschuwt voor API's die verouderd zijn op een bepaald platform versus volledig niet worden ondersteund.
Beschrijving van regel
Het aanroepen van een API die verouderd is in een bepaald besturingssysteem (versie) vanaf een aanroepsite die bereikbaar is vanuit dat besturingssysteem (versie) wordt niet aanbevolen. U kunt in plaats daarvan een niet-verouderde API aanroepen of voorkomen dat u de verouderde API aanroept op betrokken besturingssystemen.
Schendingen oplossen
Er zijn verschillende manieren om een schending van deze regel op te lossen:
- Beperk de aanroepsite tot besturingssystemen die de verouderde versie niet bevatten door deze te markeren met UnsupportedOSPlatformAttribute of ObsoletedOSPlatformAttribute.
- Beveilig de aanroep met behulp van System.OperatingSystem API's, bijvoorbeeld
if (!OperatingSystem.IsLinux())
. - Beveilig de aanroep met behulp van een API die is geannoteerd met UnsupportedOSPlatformGuardAttribute of ontkend SupportedOSPlatformGuardAttribute.
Opmerking
In het volgende codefragment ziet u een schending van 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
Met het volgende codefragment wordt de schending opgelost door een kenmerk toe te voegen aan de aanroepsite dat UnsupportedOSPlatformAttribute de versie aangeeft waarin de aangeroepen methode is verouderd.
[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
Wanneer waarschuwingen onderdrukken
Het is veilig om een waarschuwing van deze regel te onderdrukken als u zich geen zorgen maakt over het aanroepen van een verouderde API of als u weet dat de verouderde API nooit wordt aangeroepen op de betreffende versie van het besturingssysteem.
Een waarschuwing onderdrukken
Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.
#pragma warning disable CA1422
// The code that's violating the rule is on this line.
#pragma warning restore CA1422
Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none
ervan in op het configuratiebestand.
[*.{cs,vb}]
dotnet_diagnostic.CA1422.severity = none
Als u deze hele categorie regels wilt uitschakelen, stelt u de ernst voor de categorie none
in op in het configuratiebestand.
[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Interoperability.severity = none
Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.