BadImageFormatExceptionが出たよ

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

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

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

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

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

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

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

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

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

プラットフォームターゲットをx86へ変更
プラットフォームターゲットをx86へ変更

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

2013/10/23 追記

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

ビルド後の .NET アセンブリを 32bit で動作させる方法
2019/03/25 リンク切れだったため、URLを削除した。