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。