Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
| 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.