Freigeben über


CA1516: Verwenden plattformübergreifender systeminterner Geräte

Property Value
Regel-ID CA1516
Title Verwenden plattformübergreifender systeminterner Anwendungen
Category Maintainability
Fix ist unterbrechend oder nicht durchbrechend Non-breaking
Standardmäßig in .NET 10 aktiviert No

Cause

Eine plattform- oder architekturspezifische systeminterne Anwendung wird verwendet, wenn eine plattformübergreifende Entsprechung vorhanden ist.

Regelbeschreibung

Diese Regel erkennt die Verwendung plattformspezifischer systeminterner Geräte, die stattdessen durch eine entsprechende plattformübergreifende systeminterne Ersetzt werden können.

Wie man Verstöße behebt

Wenden Sie den Fixer an, der den Code wechselt, um das entsprechende plattformübergreifende systeminterne System zu verwenden.

Example

Der folgende Codeausschnitt zeigt drei ähnliche Verletzungen von 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);
}

Der folgende Codeausschnitt behebt die Verletzung und würde vom Fixer angewendet werden:

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

Sobald der Fix angewendet wurde, wird es offensichtlicher, dass die drei Methoden vereinfacht werden können, um eine einzelne Methode zu sein, die auf allen Plattformen funktioniert.

Wann sollten Warnungen unterdrückt werden?

Es ist sicher, einen Verstoß gegen diese Regel zu unterdrücken, wenn Sie sich keine Gedanken über die Wartbarkeit Ihres Codes machen.

Unterdrücken einer Warnung

Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.

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

Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, setzen Sie dessen Schweregrad auf none in der Konfigurationsdatei fest.

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

Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.

Konfigurieren des zu analysierenden Codes

Sie können konfigurieren, auf welche Ausgabeassemblytypen diese Regel angewendet werden soll. Fügen Sie einer .editorconfig-Datei in Ihrem Projekt das folgende Schlüssel-Wert-Paar hinzu, wenn diese Regel beispielsweise nur auf Code angewendet werden soll, mit dem eine Konsolenanwendung oder eine dynamisch verknüpfte Bibliothek (also keine Benutzeroberflächen-App) erstellt wird:

dotnet_code_quality.CA1516.output_kind = ConsoleApplication, DynamicallyLinkedLibrary

Weitere Informationen finden Sie unter output_kind.