Поделиться через


CA1900: поля типа значения должны быть переносимыми

TypeName

ValueTypeFieldsShouldBePortable

CheckId

CA1900

Категория

Microsoft.Portability

Критическое изменение

Breaking — если поля могут быть видны за пределами сборки.

Не критическое — если поле недоступно для кода за пределами сборки.

Причина

Это правило проверяет правильность выравнивания структур, объявленных с явной разметкой, при маршалировании в неуправляемый код на 64-разрядных операционных системах.Архитектура IA-64 не разрешает неупорядоченный доступ к памяти. Если это нарушение не устранить, возникнет сбой процесса.

Описание правила

Структуры с явной разметкой, содержащий невыровненные поля вызывают сбои в 64-разрядных операционных системах.

Устранение нарушений

Все поля меньше 8 байт должны иметь смещения, кратные их размеру, а поля размером 8 байт и больше должны иметь смещения, кратные 8.Другим решением является использование LayoutKind.Sequential вместо LayoutKind.Explicit, если для этого есть причины.

Отключение предупреждений

Это предупреждение следует отключать только в том случае, если оно возникает в ошибке.