Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
| 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 10 | 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 ä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 DisableRuntimeMarshallingAttribute ta bort attributet för sammansättningen.