Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Tulajdonság | Érték |
---|---|
Szabályazonosító | CA1422 |
Cím | Platformkompatibilitás ellenőrzése – elavult API-k |
Kategória | Együttműködési lehetőség |
A javítás kompatibilitástörő vagy nem törik | Nem törés |
Alapértelmezés szerint engedélyezve a .NET 9-ben | Figyelmeztetésként |
Ok
Az elavult operációs rendszert támogatóként megjelölt hívási helyről hívunk meg egy API-t ObsoletedOSPlatformAttribute . Ez a szabály hasonló a CA1416-hoz : Ellenőrizze a platformkompatibilitást , azzal a kivételrel, hogy figyelmeztetést ad az adott platformon elavult API-król, és nem támogatottak teljes mértékben.
Szabály leírása
Nem ajánlott egy adott operációs rendszerben (verzióban) elavult API meghívása az adott operációs rendszerről (verzió) elérhető hívási helyről. Fontolja meg inkább egy nem elavult API meghívását, vagy az elavult API meghívása ellen az érintett operációs rendszereken.
Szabálysértések kijavítása
Ennek a szabálynak a megsértését többféleképpen is kijavíthatja:
- Korlátozza a híváshelyet olyan operációs rendszerekre, amelyek nem tartalmazzák az elavult verziót a megjelölésével vagy UnsupportedOSPlatformAttributea ObsoletedOSPlatformAttribute .
- Őrizd meg a hívást API-k használatával System.OperatingSystem , például
if (!OperatingSystem.IsLinux())
. - A hívás védelme olyan API-val, amely széljegyzetekkel UnsupportedOSPlatformGuardAttribute vagy negatedekkel van elkenve SupportedOSPlatformGuardAttribute.
Példa
A következő kódrészlet a CA1422 megsértése esetén jelenik meg:
[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
Az alábbi kódrészlet kijavítja a szabálysértést azáltal, hogy hozzáad egy UnsupportedOSPlatformAttribute attribútumot a hívási helyhez, amely megadja a hívott metódus elavult verzióját.
[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
Mikor kell letiltani a figyelmeztetéseket?
Nyugodtan letilthatja a szabály figyelmeztetését, ha nem aggódik egy elavult API meghívása miatt, vagy ha tudja, hogy az elavult API soha nem lesz meghívva az érintett operációsrendszer-verzióra.
Figyelmeztetés mellőzése
Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.
#pragma warning disable CA1422
// The code that's violating the rule is on this line.
#pragma warning restore CA1422
Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none
a konfigurációs fájlban.
[*.{cs,vb}]
dotnet_diagnostic.CA1422.severity = none
A teljes szabálykategória letiltásához állítsa be a kategória súlyosságát none
a konfigurációs fájlban.
[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Interoperability.severity = none
További információ: Kódelemzési figyelmeztetések letiltása.