Freigeben über


CA1900: Werttypfelder sollten portabel sein

TypeName

ValueTypeFieldsShouldBePortable

CheckId

CA1900

Kategorie

Microsoft.Portability

Unterbrechende Änderung

Unterbrechend – Wenn das Feld außerhalb der Assembly gesehen werden kann.

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-Betriebssystemen 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, die ein explizites Layout mit falsch ausgerichteten Feldern aufweisen, verursachen Abstürze unter 64-Bit-Betriebssystemen.

Behandeln 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 andere Lösung ist, bei Bedarf LayoutKind.Sequential statt LayoutKind.Explicit zu verwenden.

Wann sollten Warnungen unterdrückt werden?

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