Поделиться через


CA1516: использование кроссплатформенных встроенных функций

Property Value
Идентификатор правила CA1516
Title Использование кроссплатформенных встроенных функций
Category Maintainability
Исправление является разрушающим или неразрушающим Non-breaking
Включен по умолчанию в .NET 10 No

Cause

Встроенные функции платформы или архитектуры используются при наличии кроссплатформенного эквивалента.

Описание правила

Это правило обнаруживает использование встроенных функций для конкретной платформы, которые можно заменить эквивалентным кроссплатформенным встроенным.

Устранение нарушений

Примените средство исправления, которое переключает код на использование эквивалентной кроссплатформенной встроенной функции.

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

Дополнительные сведения см. в разделе "Подавление предупреждений анализа кода".

Настройка кода для анализа

Вы можете настроить, к каким типам выходных сборок следует применить это правило. Например, чтобы применить это правило только к коду, который создает консольное приложение или динамически связанную библиотеку (то есть не приложение пользовательского интерфейса), добавьте следующую пару "ключ-значение" в файл .editorconfig в проекте:

dotnet_code_quality.CA1516.output_kind = ConsoleApplication, DynamicallyLinkedLibrary

Дополнительные сведения см. в output_kind.