BadImageFormatExceptionが出たよ

だいぶ前に作ったプログラムを起動してみたらなぜか例外が発生。

「BadImageFormatExceptionはハンドルされませんでした。」

以前はちゃんと動いてたのに、なぜ?
いろいろ考えたら、春先にPCを入れ替える時にOSを64bit版に切り替えてたのを思い出した。
DLLを呼び出しているプログラムなので、もしやと思ったら、やっぱりプラットフォームターゲットが「Any CPU」になってた。これだとプラットフォームに合わせて64bitでビルドされてしまうっぽい。ちなみにプログラム本体はC#なんだけど、呼び出しているDLLは32bitでビルドされている。

メインのプログラム(64bit) ---呼び出し--->DLL(32bit)

こうなっちゃうと呼び出しのタイミングで、上記のような例外が発生する。
ってことで、ターゲットを「x86」に設定して、ビルドしなおしたら無事に動くようになりました。
しかし、こういうの、なかなか気付かないよな。もうちょっと分かりやすいエラーで処理して欲しい。


2013/10/23 追記
CorFlagsというツールを使うと、ビルド後でも変更ができるらしい。
ビルド後の .NET アセンブリを 32bit で動作させる方法

コメント

このブログの人気の投稿

TabError: inconsistent use of tabs and spaces in indentation

マクロを含んだ.XLSがExcel2010で開けない

using ディレクティブまたはアセンブリ参照が不足しています。