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