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á zařazování za běhu při použití DisableRuntimeMarshallingAttribute
Kategorie Vzájemná funkční spolupráce
Oprava způsobující chybu nebo chybu způsobující chybu Nenarušující
Povoleno ve výchozím nastavení v .NET 8 Jako návrh

Příčina

Metoda používá zařazování za běhu a zařazování za běhu je explicitně zakázáno.

Popis pravidla

Pokud metoda používá při zařazování za běhu zařazování za běhu, může způsobit neočekávané rozdíly v chování v době běhu kvůli různým očekáváním nativního rozložení typu.

Jak opravit porušení

Povolte zařazování za běhu nebo používejte funkce, jako sizeof jsou a ukazatele, abyste zajistili přesné výsledky.

Kdy potlačit upozornění

Nepotlačujte 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 DisableRuntimeMarshallingAttribute atribut sestavení.