Compartilhar via


CA1516: Usar intrínsecos multiplataforma

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

Cause

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

Descrição da regra

Essa regra detecta o uso de intrínsecos específicos da plataforma que podem ser substituídos por um intrínseco de plataforma cruzada equivalente.

Como corrigir violações

Aplique o corrigidor que alterna o código para usar o intrínseco multiplataforma equivalente.

Example

O snippet de código a seguir mostra três violações semelhantes da 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 snippet de código a seguir corrige a violação e seria aplicado pelo corrigidor:

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

Depois que a correção tiver sido aplicada, torna-se mais óbvio que os três métodos podem ser simplificados para serem um único método que funcione em todas as plataformas.

Quando suprimir avisos

Será seguro suprimir uma violação dessa regra se você não estiver preocupado com a manutenção do código.

Suprimir um aviso

Se você quiser suprimir apenas uma única violação, adicione diretivas de pré-processador ao arquivo de origem para desabilitar a regra e, em seguida, habilitá-la novamente.

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

Para desabilitar a regra em um arquivo, uma pasta ou um projeto, defina a severidade como none no arquivo de configuração.

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

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

Configurar código para analisar

Você pode configurar a quais tipos de assembly de saída aplicar essa regra. Por exemplo, para aplicar essa regra apenas 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.