CA1422: プラットフォームの互換性を検証する - 廃止された API
プロパティ | 値 |
---|---|
ルール ID | CA1422 |
Title | プラットフォームの互換性を検証する - 廃止された API |
[カテゴリ] | 相互運用性 |
修正が中断ありか中断なしか | なし |
.NET 8 では既定で有効 | 警告として |
原因
ObsoletedOSPlatformAttribute でマークされた API は、廃止されたオペレーティング システム (OS) をサポートするものとしてマークされている呼び出しサイトから呼び出されます。 このルールは、 CA1416: プラットフォーム互換性の検証 に似ていますが、特定のプラットフォームで廃止された API と完全にサポートされていない API について警告する点が異なります。
規則の説明
特定の OS (バージョン) で古い API を、その OS (バージョン) から到達可能な呼び出しサイトから呼び出すことはお勧めしません。 代わりに、廃止されていない API を呼び出すか、影響を受けるオペレーティング システム上で廃止された API を呼び出さないようにすることを検討してください。
違反の修正方法
このルールの違反を修正するには、さまざまな方法があります。
- 呼び出しサイトを UnsupportedOSPlatformAttribute または ObsoletedOSPlatformAttribute でマークすることにより、廃止されたバージョンを含まないオペレーティング システムに制限します。
- System.OperatingSystem API を使用して呼び出しを保護します (例:
if (!OperatingSystem.IsLinux())
)。 - UnsupportedOSPlatformGuardAttribute の注釈が付けられた API または否定された SupportedOSPlatformGuardAttribute を使用して呼び出しを保護します。
例
次のコード スニペットは 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
詳細については、「コード分析の警告を抑制する方法」を参照してください。
関連項目
.NET