Dela via


CA1516: Använd plattformsoberoende inbyggda funktioner

Property Value
Rule ID CA1516
Title Använda plattformsoberoende inbyggda funktioner
Category Maintainability
Korrigeringen är antingen brytande eller icke-brytande Non-breaking
Aktiverad som standard i .NET 9 No

Cause

En plattforms- eller arkitekturspecifik inbyggda används när det finns en plattformsoberoende motsvarighet.

Rule description

Den här regeln identifierar användning av plattformsspecifika inbyggda funktioner som kan ersättas med en motsvarande plattformsoberoende inbyggda i stället.

Så här åtgärdar du överträdelser

Använd korrigeringen som växlar koden för att använda motsvarande plattformsoberoende inbyggda.

Example

Följande kodfragment visar tre liknande överträdelser av 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);
}

Följande kodfragment åtgärdar överträdelsen och tillämpas av korrigeringsverktyget:

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

När korrigeringen har tillämpats blir det mer uppenbart att de tre metoderna kan förenklas så att de är en enda metod som fungerar på alla plattformar.

När du ska ignorera varningar

Det är säkert att förhindra en överträdelse av den här regeln om du inte bryr dig om kodens underhållbarhet.

Undertryck en varning

Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.

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

Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none i konfigurationsfilen.

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

Mer information finns i Så här utelämnar du kodanalysvarningar.

Konfigurera kod för analys

Du kan konfigurera vilka typer av utdatasammansättning som den här regeln ska tillämpas på. Om du till exempel bara vill tillämpa den här regeln på kod som skapar ett konsolprogram eller ett dynamiskt länkat bibliotek (dvs. inte en UI-app) lägger du till följande nyckel/värde-par i en .editorconfig-fil i projektet:

dotnet_code_quality.CA1516.output_kind = ConsoleApplication, DynamicallyLinkedLibrary

Mer information finns i output_kind.