Delen via


CA1421: Methode maakt gebruik van runtime marshalling wanneer DisableRuntimeMarshallingAttribute wordt toegepast

Eigenschappen Weergegeven als
Regel-id CA1421
Titel De methode maakt gebruik van runtime-marshalling wanneer DisableRuntimeMarshallingAttribute wordt toegepast
Categorie Interoperabiliteit
Oplossing is brekend of niet-brekend Niet-brekend
Standaard ingeschakeld in .NET 9 Als suggestie

Oorzaak

Een methode maakt gebruik van runtime marshalling en runtime marshalling wordt expliciet uitgeschakeld.

Beschrijving van regel

Als een methode runtime marshalling gebruikt wanneer runtime marshalling is uitgeschakeld, kan dit onverwachte gedragsverschillen veroorzaken tijdens runtime vanwege verschillende verwachtingen van de systeemeigen indeling van een type.

Schendingen oplossen

Schakel runtime-marshalling in of gebruik functies zoals sizeof en aanwijzers om nauwkeurige resultaten te garanderen.

Wanneer waarschuwingen onderdrukken

Een waarschuwing van deze regel niet onderdrukken.

Opmerking

In het volgende codefragment ziet u een schending van 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

Als u de schending wilt oplossen, verwijdert u het DisableRuntimeMarshallingAttribute kenmerk in de assembly.