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

規則識別碼 CA1422
類別 互通性
修正是中斷或非中斷 非中斷

原因

標示為 的 ObsoletedOSPlatformAttribute API 是從標示為支援已淘汰作業系統的呼叫月臺呼叫, (OS) 。 此規則類似于 CA1416:驗證平臺相容性 ,不同之處在于它會警告指定平臺上已過時的 API,而不是完全不支援的 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,或您知道已過時的 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

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

另請參閱