Udostępnij za pośrednictwem


CA1421: Metoda używa marshalingu środowiska uruchomieniowego podczas stosowania elementu DisableRuntimeMarshallingAttribute

Właściwości Wartość
Identyfikator reguły CA1421
Tytuł Metoda używa marshalingu środowiska uruchomieniowego, gdy zastosowano metodę DisableRuntimeMarshallingAttribute
Kategoria Współdziałanie
Poprawka powodująca niezgodność lub niezgodność Niezgodność
Domyślnie włączone na platformie .NET 9 Jako sugestia

Przyczyna

Metoda używa marshalingu środowiska uruchomieniowego, a marshalling środowiska uruchomieniowego jest jawnie wyłączony.

Opis reguły

Jeśli metoda używa marshalingu środowiska uruchomieniowego, gdy marshalling środowiska uruchomieniowego jest wyłączony, może to spowodować nieoczekiwane różnice zachowania w czasie wykonywania z powodu różnych oczekiwań układu natywnego typu.

Jak naprawić naruszenia

Włącz marshaling środowiska uruchomieniowego lub używaj takich funkcji, jak sizeof i wskaźników, aby zapewnić dokładne wyniki.

Kiedy pomijać ostrzeżenia

Nie pomijaj ostrzeżenia z tej reguły.

Przykład

Poniższy fragment kodu przedstawia naruszenie 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

Aby naprawić naruszenie, usuń DisableRuntimeMarshallingAttribute atrybut zestawu.