다음을 통해 공유


CA1422: 플랫폼 호환성 유효성 검사 - 사용되지 않는 API

속성
규칙 ID CA1422
타이틀 플랫폼 호환성 유효성 검사 - 사용되지 않는 API
범주 상호 운용성
수정 사항이 주요 변경인지 여부 주요 변경 아님
.NET 8에서 기본적으로 사용 경고로

원인

ObsoletedOSPlatformAttribute로 표시된 API는 사용되지 않는 OS(운영 체제)를 지원하는 것으로 표시된 호출 사이트에서 호출됩니다. 이 규칙은 완전히 지원되지 않는 API와 대비해 지정된 플랫폼에서 사용되지 않는 API에 대해 경고한다는 점을 제외하면 CA1416: 플랫폼 호환성 유효성 검사와 유사합니다.

규칙 설명

해당 OS(버전)에서 연결할 수 있는 호출 사이트에서 지정된 OS(버전)에 사용되지 않는 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의 호출에 관심이 없거나 영향을 받는 OS 버전에서 사용되지 않는 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

자세한 내용은 방법: 코드 분석 경고 표시 안 함을 참조하세요.

참고 항목