CA1900 : Les champs de type valeur doivent être portables
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 systèmes d'exploitation 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 qui ont une topologie explicite qui contient des champs mal alignés provoquent des incidents sur les plateformes 64 bits.
Comment corriger les violations
Tous les champs qui sont plus petits que 8 octets doivent avoir des offsets qui sont multiples de leur taille, et les champs qui sont supérieurs ou égaux à 8 octets doivent avoir des offsets qui sont un multiple de 8. Une autre solution est d'utiliser LayoutKind.Sequential au lieu de LayoutKind.Explicit, si raisonnable.
Quand supprimer les avertissements
Cet avertissement doit être supprimé uniquement s'il se produit par erreur.