CA1421 : La méthode utilise le marshaling du runtime lorsque DisableRuntimeMarshallingAttribute est appliqué

Propriété Value
Identificateur de la règle CA1421
Titre La méthode utilise le marshaling du runtime lorsque DisableRuntimeMarshallingAttribute est appliqué
Catégorie Interopérabilité
Le correctif est cassant ou non cassant Sans rupture
Activé par défaut dans .NET 8 À titre de suggestion

Cause

Une méthode utilise le marshaling du runtime, et le marshaling du runtime est explicitement désactivé.

Description de la règle

Si une méthode utilise le marshaling d’exécution même lorsque le marshaling d’exécution est désactivé, cela peut entraîner des différences de comportement inattendues au moment de l’exécution en raison des attentes différentes de la disposition native d’un type.

Comment corriger les violations

Activez le marshaling d’exécution ou utilisez des fonctionnalités, comme sizeof et des pointeurs et pour garantir des résultats précis.

Quand supprimer les avertissements

Ne supprimez aucun avertissement de cette règle.

Exemple

L’extrait de code suivant montre une violation de 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

Pour corriger la violation, supprimez l’attribut DisableRuntimeMarshallingAttribute sur l’assembly.