CA1421: Metoda používá zařazování za běhu při použití DisableRuntimeMarshallingAttribute

Vlastnost Hodnota
ID pravidla CA1421
Název Metoda používá transformaci dat za běhu, když je použit atribut DisableRuntimeMarshallingAttribute.
Kategorie Vzájemná funkční spolupráce
Oprava, která může být destruktivní nebo nedestruktivní Nezlomitelný
Povoleno ve výchozím nastavení v .NET 10 Jako návrh
Příslušné jazyky C# a Visual Basic

Příčina

Metoda používá maršálování za běhu a maršálování za běhu je explicitně zakázáno.

Popis pravidla

Pokud metoda používá zařazování za běhu, když je zařazování za běhu zakázáno, může to způsobit neočekávané rozdíly v chování za běhu z důvodu rozdílných očekávání nativního rozložení typu.

Jak opravit porušení

Povolte zařazování za běhu nebo používejte prvky jako sizeof a ukazatele k zajištění přesných výsledků.

Kdy potlačit upozornění

Neignorujte upozornění z tohoto pravidla.

Příklad

Následující fragment kódu ukazuje porušení 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

Chcete-li opravit porušení, odeberte atribut DisableRuntimeMarshallingAttribute na sestavě.