Property | Value |
---|---|
Rule ID | CA1516 |
Title | クロスプラットフォーム組み込みを使用する |
Category | Maintainability |
修正が破壊的であるか非破壊的であるか | Non-breaking |
.NET 9 では既定で有効 | No |
Cause
プラットフォームまたはアーキテクチャ固有の組み込みは、クロスプラットフォームの同等の組み込みが存在する場合に使用されます。
Rule description
このルールは、代わりに同等のクロスプラットフォーム組み込み関数に置き換えることができるプラットフォーム固有の組み込みの使用を検出します。
違反を修正する方法
同等のクロスプラットフォーム組み込みを使用するようにコードを切り替える fixer を適用します。
Example
次のコード スニペットは、CA1516 の 3 つの同様の違反を示しています。
using System;
using System.Runtime.Intrinsics;
using System.Runtime.Intrinsics.Arm;
using System.Runtime.Intrinsics.Wasm;
using System.Runtime.Intrinsics.X86;
class C
{
Vector128<byte> M1(Vector128<byte> x, Vector128<byte> y) => AdvSimd.Add(x, y);
Vector128<byte> M2(Vector128<byte> x, Vector128<byte> y) => Sse2.Add(x, y);
Vector128<byte> M3(Vector128<byte> x, Vector128<byte> y) => PackedSimd.Add(x, y);
}
次のコード スニペットは違反を修正し、修正プログラムによって適用されます。
using System;
using System.Runtime.Intrinsics;
class C
{
Vector128<byte> M1(Vector128<byte> x, Vector128<byte> y) => x + y;
Vector128<byte> M2(Vector128<byte> x, Vector128<byte> y) => x + y;
Vector128<byte> M3(Vector128<byte> x, Vector128<byte> y) => x + y;
}
修正プログラムが適用されると、3 つのメソッドを簡略化して、すべてのプラットフォームで動作する 1 つのメソッドにすることがより明確になります。
警告を抑制するタイミング
コードの保守性が懸念されない場合は、この規則違反を抑制しても問題ありません。
警告を抑制する
単一の違反を抑制するだけの場合は、ソース ファイルにプリプロセッサ ディレクティブを追加して無効にしてから、規則をもう一度有効にします。
#pragma warning disable CA1516
// The code that's violating the rule is on this line.
#pragma warning restore CA1516
ファイル、フォルダー、またはプロジェクトのルールを無効にするには、設定ファイルでその重要度をnone
に設定します。
[*.{cs,vb}]
dotnet_diagnostic.CA1516.severity = none
詳細については、「コード分析の警告を抑制する方法」を参照してください。
分析するコードを構成する
この規則を適用する 出力アセンブリの種類 を構成できます。 たとえば、コンソール アプリケーションまたは動的にリンクされるライブラリ (つまり、UI アプリではない) を生成するコードにのみこの規則を適用するには、プロジェクトの .editorconfig ファイルに次のキーと値のペアを追加します。
dotnet_code_quality.CA1516.output_kind = ConsoleApplication, DynamicallyLinkedLibrary
詳細については、「 output_kind」を参照してください。
.NET