CA1900: 値型フィールドはポータブルでなければなりません

Item [値]
規則 ID CA1900
カテゴリ Microsoft.Portability
互換性に影響する変更点 中断あり - アセンブリの外部からフィールドを参照できる場合。

中断なし - アセンブリの外部からフィールドを参照できない場合。

原因

この規則では、明示的なレイアウトによって宣言された構造体が、64 ビット オペレーティング システムでアンマネージド コードにマーシャリングされるときに、適切にアラインされるかどうかを確認します。 IA-64 では、アラインされていないメモリ アクセスは許可されません。この違反が修正されない場合、プロセスはクラッシュします。

規則の説明

正しくアラインされていないフィールドを含んでいる、明示的なレイアウトを持つ構造体によって、64 ビット オペレーティング システムでクラッシュが発生します。

違反の修正方法

8 バイトより小さいすべてのフィールドには、そのサイズの倍数であるオフセットが必要です。また、8 バイト以上のフィールドには、8 の倍数であるオフセットが必要です。 もう 1 つの解決策は、LayoutKind.Explicit の代わりに LayoutKind.Sequential を使用することです (適切な場合)。

どのようなときに警告を抑制するか

この警告は、誤って発生した場合にのみ抑制する必要があります。