CA1422: Ověření kompatibility platformy – zastaralá rozhraní API
Vlastnost | Hodnota |
---|---|
ID pravidla | CA1422 |
Název | Ověření kompatibility platformy – zastaralá rozhraní API |
Kategorie | Vzájemná funkční spolupráce |
Oprava způsobující chybu nebo chybu způsobující chybu | Nenarušující |
Povoleno ve výchozím nastavení v .NET 9 | Jako upozornění |
Příčina
Rozhraní API označené ObsoletedOSPlatformAttribute pomocí se volá z lokality volání, která je označená jako podpora zastaralého operačního systému (OS). Toto pravidlo se podobá CA1416: Ověřte kompatibilitu platformy s tím rozdílem, že varuje před rozhraními API, která jsou na dané platformě zastaralá a zcela nepodporovaná.
Popis pravidla
Volání rozhraní API zastaralého v daném operačním systému (verze) z webu volání, které je dostupné z tohoto operačního systému (verze), se nedoporučuje. Zvažte místo toho volání zastaralého rozhraní API nebo ochranu před voláním zastaralého rozhraní API v ovlivněných operačních systémech.
Jak opravit porušení
Existuje několik způsobů, jak opravit porušení tohoto pravidla:
- Omezte lokalitu volání na operační systémy, které neobsahují zastaralou verzi, tím, že ji označíte UnsupportedOSPlatformAttribute nebo ObsoletedOSPlatformAttribute.
- Hlídejte volání pomocí System.OperatingSystem rozhraní API,
if (!OperatingSystem.IsLinux())
například . - Chraňte volání pomocí rozhraní API, které je opatřeno poznámkami UnsupportedOSPlatformGuardAttribute nebo negated .SupportedOSPlatformGuardAttribute
Příklad
Následující fragment kódu ukazuje porušení 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
Následující fragment kódu opraví porušení tím, že do webu UnsupportedOSPlatformAttribute volání přidá atribut, který určuje verzi, ve které byla volána metoda byla zastaralá.
[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
Kdy potlačit upozornění
Je bezpečné potlačit upozornění z tohoto pravidla, pokud vás nezajímá volání zastaralého rozhraní API nebo pokud víte, že zastaralé rozhraní API se nikdy nebude volat na ovlivněnou verzi operačního systému.
Potlačení upozornění
Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.
#pragma warning disable CA1422
// The code that's violating the rule is on this line.
#pragma warning restore CA1422
Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none
konfiguračním souboru.
[*.{cs,vb}]
dotnet_diagnostic.CA1422.severity = none
Chcete-li tuto celou kategorii pravidel zakázat, nastavte závažnost kategorie na none
hodnotu v konfiguračním souboru.
[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Interoperability.severity = none
Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.