Partager via


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.