CA1422: проверка совместимости платформы — устаревшие API

Свойство Значение
Идентификатор правила CA1422
Заголовок Проверка совместимости платформ — устаревшие API
Категория Совместимость
Исправление является критическим или не критическим Не критическое
Включен по умолчанию в .NET 8 Как предупреждение

Причина

API, помеченный как ObsoletedOSPlatformAttribute вызывающий, вызывается с сайта вызова, помеченного как поддержка устаревшей операционной системы (ОС). Это правило похоже на CA1416: проверка совместимости платформы, за исключением того, что она предупреждает об api, устаревших на данной платформе, и полностью неподдерживаемой.

Описание правила

Не рекомендуется вызывать API, устаревший в данной ОС (версии) с сайта вызова, доступного из этой ОС (версии). Рассмотрите возможность вызова устаревшего API вместо этого или защиты от вызова устаревшего API в затронутых операционных системах.

Устранение нарушений

Существуют различные способы устранения нарушения этого правила:

Пример

В следующем фрагменте кода показано нарушение 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

Следующий фрагмент кода исправляет нарушение путем добавления на сайт вызова атрибута UnsupportedOSPlatformAttribute , указывающего версию вызываемого метода, устарела.

[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

Когда лучше отключить предупреждения

Это безопасно, чтобы отключить предупреждение из этого правила, если вы не обеспокоены вызовом устаревшего API или если вы знаете, что устаревший API никогда не будет вызываться в затронутой версии ОС.

Отключение предупреждений

Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.

#pragma warning disable CA1422
// The code that's violating the rule is on this line.
#pragma warning restore CA1422

Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none в файле конфигурации.

[*.{cs,vb}]
dotnet_diagnostic.CA1422.severity = none

Чтобы отключить эту всю категорию правил, задайте уровень серьезности для категории none в файле конфигурации.

[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Interoperability.severity = none

Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.

См. также