Dela via


CA1421: Metoden använder runtime-marshalling när DisableRuntimeMarshallingAttribute tillämpas

Egenskap Värde
Regel-ID CA1421
Title Metoden använder runtime marshalling när DisableRuntimeMarshallingAttribute tillämpas
Kategori Samverkan
Korrigeringen är antingen invasiv eller icke-invasiv Oumbrytbar
Aktiverad som standard i .NET 10 Som förslag
Tillämpliga språk C# och Visual Basic

Orsak

En metod använder runtime-marshalling och runtime-marshalling är uttryckligen inaktiverad.

Regelbeskrivning

Om en metod använder runtime-marshalling när runtime-marshalling är inaktiverad kan det orsaka oväntade beteendeskillnader under körning på grund av olika förväntningar på en typs ursprungliga layout.

Så här åtgärdar du överträdelser

Aktivera runtime-marshalling eller använd funktioner som sizeof och pekare för att säkerställa korrekta resultat.

När du ska ignorera varningar

Ignorera inte en varning från den här regeln.

Exempel

Följande kodfragment visar ett brott mot 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

Åtgärda överträdelsen genom att ta bort DisableRuntimeMarshallingAttribute attributet på sammansättningen.