Freigeben über


Werttypfelder sollten portabel sein

Aktualisiert: November 2007

     TypeName

ValueTypeFieldsShouldBePortable

CheckId

CA1900

Kategorie

Microsoft.Portability

Unterbrechende Änderung

Unterbrechend – Wenn das Feld außerhalb der Assembly sichtbar ist. Nicht unterbrechend – Wenn das Feld nicht außerhalb der Assembly sichtbar ist.

Ursache

Anhand dieser Regel wird überprüft, ob die mit explizitem Layout deklarierten Strukturen korrekt ausgerichtet werden, wenn sie auf 64-Bit-Plattformen an nicht verwalteten Code gemarshallt werden. IA-64 lässt den Zugriff auf nicht korrekt ausgerichteten Speicher nicht zu, und der Vorgang führt zu einem Absturz, wenn der Verstoß nicht behoben wird.

Regelbeschreibung

Strukturen mit explizitem Layout, die falsch ausgerichtete Felder enthalten, verursachen auf 64-Bit-Plattformen Systemabstürze.

Behandlung von Verstößen

Alle Felder, die kleiner als 8 Bytes sind, müssen Offsets mit einem Vielfachen ihrer Größe aufweisen, und Felder, die mindestens 8 Bytes groß sind, müssen Offsets aufweisen, deren Größe ein Vielfaches von 8 ist. Eine weitere Lösung besteht darin, LayoutKind.Sequential statt LayoutKind.Explicit zu verwenden, falls angemessen.

Wann sollten Warnungen unterdrückt werden?

Diese Warnung sollte nur unterdrückt werden, wenn sie fälschlicherweise generiert wird.