BadImageFormatExceptionが出たよ

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

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

以前はちゃんと動いてたのに、なぜ?

いろいろ考えたら、春先にPCを入れ替える時にOSを64bit版に切り替えてたのを思い出した。

DLLを呼び出しているプログラムなので、もしやと思ったら、やっぱりプラットフォームターゲットが「Any CPU」になってた。これだとプラットフォームに合わせて64bitでビルドされてしまうっぽい。ちなみにプログラム本体はC#なんだけど、呼び出しているDLLは32bitでビルドされている。

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

こうなっちゃうと呼び出しのタイミングで、上記のような例外が発生する。

ってことで、ターゲットを「x86」に設定して、ビルドしなおしたら無事に動くようになりました。

しかし、こういうの、なかなか気付かないよな。もうちょっと分かりやすいエラーで処理して欲しい。

2013/10/23 追記

CorFlagsというツールを使うと、ビルド後でも変更ができるらしい。

ビルド後の .NET アセンブリを 32bit で動作させる方法