CA1421: Metoden använder runtime-marshalling när DisableRuntimeMarshallingAttribute tillämpas
Property | Värde |
---|---|
Regel-ID | CA1421 |
Title | Metoden använder runtime marshalling när DisableRuntimeMarshallingAttribute tillämpas |
Kategori | Samverkan |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Som förslag |
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 inaktiveras kan det orsaka oväntade beteendeskillnader vid körning på grund av olika förväntningar på en typs interna 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 DisableRuntimeMarshallingAttribute ta bort attributet för sammansättningen.