CA1422:驗證平臺相容性 - 已過時的 API

屬性
規則識別碼 CA1422
標題 驗證平臺相容性 - 已過時的 API
類別 互通性
修正程式是中斷或非中斷 不中斷
預設在 .NET 8 中啟用 作為警告

原因

標記的 ObsoletedOSPlatformAttribute API 會從標示為支援過時作業系統 (OS) 的呼叫月臺呼叫。 此規則類似于 CA1416:驗證平臺相容性 ,不同之處在于它會警告指定平臺上已過時的 API,而不是完全不受支援。

檔案描述

不建議從該 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

如需詳細資訊,請參閱 如何隱藏程式碼分析警告

另請參閱