CA1421: Methode verwendet Runtimemarshalling, wenn „DisableRuntimeMarshallingAttribute“ angewendet wird
Eigenschaft | Wert |
---|---|
Regel-ID | CA1421 |
Titel | Methode verwendet Runtimemarshalling, wenn „DisableRuntimeMarshallingAttribute“ angewendet wird |
Kategorie | Interoperabilität |
Fix führt oder führt nicht zur Unterbrechung | Nicht unterbrechend |
Standardmäßig in .NET 8 aktiviert | Als Vorschlag |
Ursache
Eine Methode verwendet das Runtimemarshalling, obwohl dieses explizit deaktiviert ist.
Regelbeschreibung
Wenn eine Methode Runtimemarshalling auch dann verwendet, wenn das Runtimemarshalling deaktiviert ist, kann dies aufgrund unterschiedlicher Erwartungen an das native Layout eines Typs zu unerwarteten Verhaltensunterschieden zur Runtime führen.
Behandeln von Verstößen
Aktivieren Sie das Runtimemarshalling, oder verwenden Sie Features wie sizeof
und Zeiger, um genaue Ergebnisse sicherzustellen.
Wann sollten Warnungen unterdrückt werden?
Unterdrücken Sie Warnungen dieser Regel nicht.
Beispiel
Der folgende Codeschnipsel zeigt eine Verletzung von 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
Entfernen Sie das DisableRuntimeMarshallingAttribute-Attribut in der Assembly, um die Verletzung zu beheben.