2011年6月27日月曜日

BadImageFormatException(x64とx86の混在はダメー!)

Visutal StudioでC#のコンソールアプリを作ってデバッグ実行するときは「Ctrl + F5」で実行しないとコマンドプロンプトがすぐ消えちゃってデバッグしにくいってことを知らずに、すぐ消えるコマンドプロンプトをどうやったら表示したままにておけるのか、10分ほど悩んじゃうぐらいMicrosoftな開発環境とは縁遠くなってしまった私です。Eclipseが恋しいよぅ。

さて、今回初めて開発用PCがWindows 7 の 64bit版を触っていて、いろいろ引っかかる部分が多いので、今後も引っかかりそうなものはここに書き留めていくことにします。

実行すると BadImageFormatException が出る

なんのことだかさっぱりでしたが、とりあえず参照設定したサードパーティのDLLの読み込みでNGらしい。で、ググってmsdnのリファレンスを見ると、この例外が発生する原因として
DLL または実行可能ファイルは 64 ビット アセンブリとして読み込まれますが、32 ビットの機能やリソースが含まれています。
という記載があった。

今回の環境は、

開発用PC(Visual Studioが動作しているPC)・・・Windows 7 Professional 64bit版
サードパーティのDLL・・・Windows 64bit版 DLL

ということで、Win64bit環境だしデフォルトで作れば問題なさそうな気もするが、実はVisual Studioで作成したアプリ(プロジェクト)のデフォルトが32bit(x86)という罠

というわけで、Visual Studioのプロジェクト側の設定を64bitにしてやるとうまく動きました。

設定変更方法

Visual Studioの「ソリューションエクスプローラー」でソリューションを右クリック。
コンテキストメニューで「プロパティ」を選択。
「プラットフォーム」というプルダウン可能な項目があるので、環境に合わせて(今回だと「x86」から「x64」へ)変更。
※「x64」がプルダウンに無い場合は「構成マネージャー」を使って追加。




ちなみに無料のVisual Studio Expressだとこの設定ができないらしいが、実は単純に「Visualには」できないだけらしい(これナイスな情報ですね)。

0 件のコメント: