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


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

Обновлен: Ноябрь 2007

TypeName

ValueTypeFieldsShouldBePortable

CheckId

CA1900

Категория

Microsoft.Portability

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

Критическое изменение — если поле видимо вне сборки. Не критическое изменение — если поле не видно вне сборки.

Причина

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

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

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

Предотвращение нарушений

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

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

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