CA1516:使用跨平台内部函数

Property Value
Rule ID CA1516
Title 使用跨平台内部函数
Category Maintainability
修复是中断修复还是非中断修复 Non-breaking
在 .NET 9 中默认启用 No

Cause

当存在跨平台等效项时,将使用特定于平台或体系结构的内部函数。

Rule description

此规则可检测平台特定的内部函数的使用,这些内部函数可以改为替换为等效的跨平台内部函数。

如何修复违规行为

应用用于切换代码以使用等效跨平台内部函数的修复程序。

Example

以下代码片段显示了 CA1516 的三个类似冲突:

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;
}

应用修补程序后,很明显,这三种方法可以简化为适用于所有平台的单个方法。

何时禁止显示警告

如果不在乎代码的可维护性,可安全地禁止显示此规则的冲突。

抑制警告

如果只想抑制单个冲突,请将预处理器指令添加到源文件以禁用该规则,然后重新启用该规则。

#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