実際の例外を確認するには、64ビットマシンが必要です。問題を再現するダミークラスをいくつか作成しました。
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public class InnerType
{
char make;
char model;
UInt16 series;
}
[StructLayout(LayoutKind.Explicit)]
public class OutterType
{
[FieldOffset(0)]
char blah;
[FieldOffset(1)]
char blah2;
[FieldOffset(2)]
UInt16 blah3;
[FieldOffset(4)]
InnerType details;
}
class Program
{
static void Main(string[] args)
{
var t = new OutterType();
Console.ReadLine();
}
}
これを64clrで実行すると、タイプロード例外が発生します。
System.TypeLoadException was unhandled
Message="Could not load type 'Sample.OutterType' from assembly 'Sample, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' because it contains an object field at offset 4 that is incorrectly aligned or overlapped by a non-object field."
ターゲットCPUを32に強制すると、正常に動作します。
また、InnerTypeをクラスから構造体に変更すると、それも機能します。誰かが何が起こっているのか、私が間違っているのかを説明できますか?
ありがとう