Teilen über


CA1421: Methode verwendet Runtimemarshalling, wenn „DisableRuntimeMarshallingAttribute“ angewendet wird

Eigenschaft Wert
Regel-ID CA1421
Titel Methode verwendet Runtimemarshalling, wenn „DisableRuntimeMarshallingAttribute“ angewendet wird
Kategorie Interoperabilität
Fix führt oder führt nicht zur Unterbrechung Nicht unterbrechend
Standardmäßig in .NET 10 aktiviert Als Vorschlag

Ursache

Eine Methode verwendet das Runtimemarshalling, obwohl dieses explizit deaktiviert ist.

Regelbeschreibung

Wenn eine Methode Laufzeit-Marshalling verwendet, wenn die Laufzeit-Marshalling deaktiviert ist, kann dies zu unerwarteten Verhaltensunterschieden zur Laufzeit führen, da unterschiedliche Erwartungen an das systemeigene Layout eines Typs bestehen.

Behandeln von Verstößen

Aktivieren Sie das Runtimemarshalling, oder verwenden Sie Features wie sizeof und Zeiger, um genaue Ergebnisse sicherzustellen.

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie Warnungen dieser Regel nicht.

Beispiel

Der folgende Codeschnipsel zeigt eine Verletzung von CA1421:

using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

[assembly: DisableRuntimeMarshalling]

class C
{
    public void Test()
    {
        nint offset = Marshal.OffsetOf(typeof(ValueType), "field");
    }
}

struct ValueType
{
    int field;
}

Imports System.Runtime.CompilerServices
Imports System.Runtime.InteropServices

<Assembly: DisableRuntimeMarshalling>

Class C
    Shared Sub S1()
        Dim offset As IntPtr = Marshal.OffsetOf(GetType(ValueType), "field")
    End Sub
End Class

Structure ValueType
    Dim field As Integer
End Structure

Entfernen Sie das DisableRuntimeMarshallingAttribute-Attribut in der Assembly, um die Verletzung zu beheben.