2011-01-27 10 views
4

CorFlags.exeSystem.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が指定されていないとPEPE32に等しいです。 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ビットバージョンも利用可能であることを知っていますが、私はエラーの原因を知りたいだけです。

答えて

9

使用しているSystem.Data.SQLite.dllファイルはmixed-mode assemblyです。つまり、純粋な.NETコード(「ILONLY:0」フラグも参照)ではなく、管理されていないマシンコードも含まれています。 「任意のCPU」にすることはできません。そのため、DLLには32ビットのネイティブコードが含まれているため、32ビットプロセスにのみロードできます。それ以外の場合は、BadImageFormatExceptionが発生します。

+0

@Mormegil - 例外がスローされた理由を私は理解しています。 32BITフラグが付いていない理由を知りたいだけです。 – Giorgi

+1

@Giorgiまあ...誰もフラグを設定していないので。ポイントは、ILONLYフラグが設定されていないことです。その場合、アセンブリには非管理コードが含まれていますが、32BITフラグは関係なく、DLLがPE +でない場合は32ビットのみと見なされます(PE +の場合は64ビットのみ)。 ILONLYフラグが設定されている場合のみ、32BITはDLLを32ビットのみ、またはAnyCPUと見なすかどうかを決定します。 – Mormegil

+0

@Mormegil - アセンブリが64ビットの場合、32BITフラグは無視されるべきですか? – Giorgi

1

あなたはsourceforget.netからSQLite-1.0.66.0-binaries.zipファイルをダウンロードする場合、これはあなたが探しているものであるSystem.Data.SQLite.dllファイルでのbin/x64のディレクトリが含まれています。

それは、あまりにもItaniumのディレクトリを持っている..

URLは次のとおりです。

http://sourceforge.net/projects/sqlite-dotnet2/files/SQLite%20for%20ADO.NET%202.0/1.0.66.0/

+0

私が私の答えで言ったように、私は64ビットバージョンを認識しています。私はなぜ32ビット版にフラグがないのか興味があります。 – Giorgi

+0

Woops ..メッセージが届きません.. –

+0

bin/Managedのものは100%管理されており、適切なsqlite3.dllが必要です。したがって、これを使用してwww.sqlite.orgのx86バージョンのsqlite3.dllを取得する場合は、あなたがしたいことをする必要があります。 –

関連する問題