CA1900: поля типа значения должны быть переносимыми
TypeName |
ValueTypeFieldsShouldBePortable |
CheckId |
CA1900 |
Категория |
Microsoft.Portability |
Критическое изменение |
Breaking — если поля могут быть видны за пределами сборки. Не критическое — если поле недоступно для кода за пределами сборки. |
Причина
Это правило проверяет правильность выравнивания структур, объявленных с явной разметкой, при маршалировании в неуправляемый код на 64-разрядных операционных системах.Архитектура IA-64 не разрешает неупорядоченный доступ к памяти. Если это нарушение не устранить, возникнет сбой процесса.
Описание правила
Структуры с явной разметкой, содержащий невыровненные поля вызывают сбои в 64-разрядных операционных системах.
Устранение нарушений
Все поля меньше 8 байт должны иметь смещения, кратные их размеру, а поля размером 8 байт и больше должны иметь смещения, кратные 8.Другим решением является использование LayoutKind.Sequential вместо LayoutKind.Explicit, если для этого есть причины.
Отключение предупреждений
Это предупреждение следует отключать только в том случае, если оно возникает в ошибке.