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.