Partilhar via


CA1516: Use intrínsecos multiplataforma

Property Value
ID da regra CA1516
Title Use intrínsecos multiplataforma
Category Maintainability
A correção é invasiva ou não invasiva Non-breaking
Habilitado por padrão no .NET 10 No

Cause

Uma plataforma ou arquitetura intrínseca específica é usada quando existe um equivalente entre plataformas.

Descrição da regra

Esta regra deteta o uso de intrínsecos específicos da plataforma que podem ser substituídos por um intrínseco equivalente entre plataformas.

Como corrigir violações

Aplique o fixador que alterna o código para usar o equivalente intrínseco de plataforma cruzada.

Example

O trecho de código a seguir mostra três violações semelhantes do 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);
}

O trecho de código a seguir corrige a violação e seria aplicado pelo fixador:

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

Uma vez que a correção tenha sido aplicada, torna-se mais óbvio que os três métodos poderiam ser simplificados para ser um único método que funciona em todas as plataformas.

Quando suprimir avisos

É seguro suprimir uma violação dessa regra se você não estiver preocupado com a capacidade de manutenção do seu código.

Suprimir um aviso

Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar a regra.

#pragma warning disable CA1516
// The code that's violating the rule is on this line.
#pragma warning restore CA1516

Para desabilitar a regra para um arquivo, pasta ou projeto, defina sua gravidade como none no arquivo de configuração .

[*.{cs,vb}]
dotnet_diagnostic.CA1516.severity = none

Para obter mais informações, consulte Como suprimir avisos de análise de código.

Configurar código para análise

Você pode configurar a quais tipos de assembly de saída aplicar essa regra. Por exemplo, para aplicar essa regra somente ao código que produz um aplicativo de console ou uma biblioteca vinculada dinamicamente (ou seja, não um aplicativo de interface do usuário), adicione o seguinte par chave-valor a um arquivo .editorconfig em seu projeto:

dotnet_code_quality.CA1516.output_kind = ConsoleApplication, DynamicallyLinkedLibrary

Para obter mais informações, consulte output_kind.