Les champs de type valeur doivent être portables
Mise à jour : novembre 2007
TypeName |
ValueTypeFieldsShouldBePortable |
CheckId |
CA1900 |
Catégorie |
Microsoft.Portability |
Modification avec rupture |
Avec rupture - Si le champ est visible à l'extérieur de l'assembly. Sans rupture - Si le champ n'est pas visible à l'extérieur de l'assembly. |
Cause
Cette règle vérifie que les structures déclarées avec une disposition explicite s'aligneront correctement lorsqu'elles seront marshalées pour le code non managé sur les plateformes 64 bits. IA-64 n'autorise pas les accès mémoire non alignés et le processus se bloquera si cette violation n'est pas corrigée.
Description de la règle
Les structures avec une disposition explicite contenant des champs mal alignés provoquent des incidents sur les plateformes 64 bits.
Comment corriger les violations
Tous les champs inférieurs à 8 octets doivent avoir des offsets qui sont des multiples de leur taille, et les champs de 8 octets ou plus doivent avoir des offsets qui sont un multiple de 8. Il existe une autre solution qui consiste à utiliser LayoutKind.Sequential au lieu de LayoutKind.Explicit si cela est raisonnable.
Quand supprimer les avertissements
Cet avertissement doit être supprimé uniquement s'il se produit par erreur.