Compartir a través de


CA1516: Uso de intrínsecos multiplataforma

Property Value
Identificador de la regla CA1516
Title Uso de intrínsecos multiplataforma
Category Maintainability
La corrección es disruptiva o no disruptiva Non-breaking
Habilitado de forma predeterminada en .NET 10 No

Cause

Cuando existe un equivalente multiplataforma, se usa una plataforma o una arquitectura intrínseca específica.

Descripción de la regla

Esta regla detecta el uso de intrínsecos específicos de la plataforma que se pueden reemplazar por un intrínseco multiplataforma equivalente en su lugar.

Cómo corregir infracciones

Aplique el solucionador que cambia el código para usar el intrínseco multiplataforma equivalente.

Example

El fragmento de código siguiente muestra tres infracciones similares de 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);
}

El siguiente fragmento de código corrige la infracción y lo aplicaría el solucionador:

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

Una vez aplicada la corrección, resulta más evidente que los tres métodos podrían simplificarse para ser un único método que funciona en todas las plataformas.

Cuándo suprimir las advertencias

Es seguro suprimir una infracción de esta regla si no le preocupa el mantenimiento del código.

Supresión de una advertencia

Si solo quiere suprimir una única infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y volver a habilitar la regla.

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

Para deshabilitar la regla de un archivo, una carpeta o un proyecto, establezca su severidad none en el archivo de configuración.

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

Para obtener más información, consulte Procedimiento para suprimir advertencias de análisis de código.

Configuración del código para analizar

Puede configurar los tipos de ensamblado de salida a los que aplicar esta regla. Por ejemplo, para aplicar esta regla solo al código que produce una aplicación de consola o una biblioteca vinculada dinámicamente (es decir, no una aplicación de interfaz de usuario), agregue el siguiente par clave-valor a un archivo .editorconfig en el proyecto:

dotnet_code_quality.CA1516.output_kind = ConsoleApplication, DynamicallyLinkedLibrary

Para obtener más información, consulte output_kind.