CA1900: Value type fields should be portable
The new home for Visual Studio documentation is Visual Studio 2017 Documentation on docs.microsoft.com.
For the latest documentation on Visual Studio 2017, see CA1900: Value type fields should be portable on docs.microsoft.com.
| TypeName | ValueTypeFieldsShouldBePortable |
| CheckId | CA1900 |
| Category | Microsoft.Portability |
| Breaking Change | Breaking - If the field can be seen outside the assembly. Non-breaking - If the field is not visible outside the assembly. |
This rule checks that structures that are declared with explicit layout will align correctly when marshaled to unmanaged code on 64-bit operating systems. IA-64 does not allow unaligned memory accesses and the process will crash if this violation is not fixed.
Structures that have explicit layout that contains misaligned fields cause crashes on 64-bit operating systems.
All fields that are smaller than 8 bytes must have offsets that are a multiple of their size, and fields that are 8 bytes or more must have offsets that are a multiple of 8. Another solution is to use LayoutKind.Sequential instead of LayoutKind.Explicit, if reasonable.
This warning should be suppressed only if it occurs in error.