CA1900: Value type fields should be portable
Applies to: Visual Studio Visual Studio for Mac
Note
This article applies to Visual Studio 2017. If you're looking for the latest Visual Studio documentation, see Visual Studio documentation. We recommend upgrading to the latest version of Visual Studio. Download it here
Item | Value |
---|---|
RuleId | 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. |
Cause
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.
Rule description
Structures that have explicit layout that contains misaligned fields cause crashes on 64-bit operating systems.
How to fix violations
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.
When to suppress warnings
This warning should be suppressed only if it occurs in error.