CA1422: Platformkompatibilitás ellenőrzése – elavult API-k
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 |
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.
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.
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 ObsoletedOSPlatformAttributea UnsupportedOSPlatformAttribute .
- Ő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.
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
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.
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.
.NET-visszajelzés
A(z) .NET egy nyílt forráskód projekt. Visszajelzés adásához válasszon egy hivatkozást: