Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
| Vlastnost | Hodnota |
|---|---|
| ID pravidla | CA1422 |
| Název | Ověřte kompatibilitu platformy – zastaralé API |
| Kategorie | Vzájemná funkční spolupráce |
| Oprava, která může být destruktivní nebo nedestruktivní | Nenarušující |
| Povoleno ve výchozím nastavení v .NET 10 | Jako upozornění |
| Příslušné jazyky | C# a Visual Basic |
Příčina
Rozhraní API označené ObsoletedOSPlatformAttribute je voláno z místa volání, které je označeno jako podporující zastaralý operační systém (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 volání nezastaralého rozhraní API, nebo se ujistěte, že volání zastaralého rozhraní API je na ovlivněných operačních systémech chráněno.
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.
- Zabezpečte volání pomocí rozhraní API System.OperatingSystem, například
if (!OperatingSystem.IsLinux()). - 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 k místu volání přidá atribut UnsupportedOSPlatformAttribute, který určuje verzi, ve které metoda zastarala.
[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.