Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
| Propriété | Valeur |
|---|---|
| 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 a un effet disruptif ou non disruptif | Sans rupture |
| Activé par défaut dans .NET 10 | À titre de suggestion |
| Langues applicables | C# et Visual Basic |
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 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 de différentes attentes de la configuration native d’un type.
Comment corriger les violations
Activez le marshaling d’exécution ou utilisez des fonctionnalités comme sizeof et des pointeurs pour garantir des résultats exacts.
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.