CorFlags.exeをSystem.Data.SQLite.dll
に対してhttp://sqlite.phxsoftware.com/から実行すると、次の出力が生成されます。CorFlags.exe、System.Data.SQLite.dll、BadImageFormatException
Version : v2.0.50727
CLR Header: 2.5
PE : PE32
CorFlags : 24
ILONLY : 0
32BIT : 0
Signed : 1
あなたが見ることができるように、32BIT
が指定されていないとPE
はPE32
に等しいです。 Moving from 32-bit to 64-bit application development on .NET Frameworkによれば、アセンブリがのいずれかのCPUであることを意味します。しかし、エラーで64ビットアプリケーションの結果から、アセンブリを使用して:CorFlags.exeはどれCPUを報告している場合
System.BadImageFormatException: Could not load file or assembly 'System.Data.SQLite' or one of its dependencies. An attempt was made to load a program with an incorrect format. File name: 'System.Data.SQLite'
、なぜ例外が発生しますか。アセンブリに32BIT: 0
のマークが間違っていますか?
私は、64ビットバージョンも利用可能であることを知っていますが、私はエラーの原因を知りたいだけです。
@Mormegil - 例外がスローされた理由を私は理解しています。 32BITフラグが付いていない理由を知りたいだけです。 – Giorgi
@Giorgiまあ...誰もフラグを設定していないので。ポイントは、ILONLYフラグが設定されていないことです。その場合、アセンブリには非管理コードが含まれていますが、32BITフラグは関係なく、DLLがPE +でない場合は32ビットのみと見なされます(PE +の場合は64ビットのみ)。 ILONLYフラグが設定されている場合のみ、32BITはDLLを32ビットのみ、またはAnyCPUと見なすかどうかを決定します。 – Mormegil
@Mormegil - アセンブリが64ビットの場合、32BITフラグは無視されるべきですか? – Giorgi