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.