Бөлісу құралы:


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

Свойство Значение
Идентификатор правила CA1422
Заголовок Проверка совместимости платформ — устаревшие API
Категория Совместимость
Исправление является критическим или не критическим неразрывный
Включен по умолчанию в .NET 10 Как предупреждение
Применимые языки C# и Visual Basic

Причина

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

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

См. также