Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
| 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 10 aktiviert | Als Vorschlag |
Ursache
Eine Methode verwendet das Runtimemarshalling, obwohl dieses explizit deaktiviert ist.
Regelbeschreibung
Wenn eine Methode Laufzeit-Marshalling verwendet, wenn die Laufzeit-Marshalling deaktiviert ist, kann dies zu unerwarteten Verhaltensunterschieden zur Laufzeit führen, da unterschiedliche Erwartungen an das systemeigene Layout eines Typs bestehen.
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.