CA1422: Weryfikowanie zgodności platformy — przestarzałe interfejsy API
Właściwości | Wartość |
---|---|
Identyfikator reguły | CA1422 |
Tytuł | Weryfikowanie zgodności platformy — przestarzałe interfejsy API |
Kategoria | Współdziałanie |
Poprawka powodująca niezgodność lub niezgodność | Niezgodność |
Domyślnie włączone na platformie .NET 9 | Jako ostrzeżenie |
Przyczyna
Interfejs API oznaczony przy ObsoletedOSPlatformAttribute użyciu jest wywoływany z witryny wywołania oznaczonej jako obsługa przestarzałego systemu operacyjnego. Ta reguła jest podobna do CA1416: Zweryfikuj zgodność platformy , z tą różnicą, że ostrzega o interfejsach API, które są przestarzałe na danej platformie, a nieobsługiwane całkowicie.
Opis reguły
Wywoływanie interfejsu API, który jest przestarzały w danym systemie operacyjnym (wersja) z witryny wywołania dostępnej z tego systemu operacyjnego (wersja) nie jest zalecane. Rozważ wywołanie nie przestarzałego interfejsu API lub ochronę przed wywołaniem przestarzałego interfejsu API w systemach operacyjnych, których dotyczy problem.
Jak naprawić naruszenia
Istnieją różne sposoby naprawiania naruszenia tej reguły:
- Ogranicz lokację wywołania do systemów operacyjnych, które nie zawierają przestarzałej wersji, oznaczając ją elementem UnsupportedOSPlatformAttribute lub ObsoletedOSPlatformAttribute.
- Ochrona wywołania przy użyciu System.OperatingSystem interfejsów API, na przykład
if (!OperatingSystem.IsLinux())
. - Ochrona wywołania przy użyciu interfejsu API, który jest oznaczony adnotacją UnsupportedOSPlatformGuardAttribute lub zanegował SupportedOSPlatformGuardAttribute.
Przykład
Poniższy fragment kodu przedstawia naruszenie 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
Poniższy fragment kodu naprawia naruszenie przez dodanie do witryny wywołania atrybutu UnsupportedOSPlatformAttribute określającego wersję, w ramach którego wywołana metoda została przestarzała.
[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
Kiedy pomijać ostrzeżenia
Można bezpiecznie pominąć ostrzeżenie z tej reguły, jeśli nie interesuje Cię wywoływanie przestarzałego interfejsu API lub jeśli wiesz, że przestarzały interfejs API nigdy nie będzie wywoływany w wersji systemu operacyjnego, której dotyczy problem.
Pomijanie ostrzeżenia
Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.
#pragma warning disable CA1422
// The code that's violating the rule is on this line.
#pragma warning restore CA1422
Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none
w pliku konfiguracji.
[*.{cs,vb}]
dotnet_diagnostic.CA1422.severity = none
Aby wyłączyć tę całą kategorię reguł, ustaw ważność dla kategorii na none
w pliku konfiguracji.
[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Interoperability.severity = none
Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.