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 8 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:

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.

Zobacz też