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.