64bit版WindowsのVisual Studio 2010のバグ

32bitのWindows 7コンパイルできた.NET Framework 2.0のアプリケーションを、64bitのWindows 7コンパイルしたら通らなかった。

error RG0000: ファイルまたはアセンブリ 'hoge.dll'、またはその依存関係の 1 つが読み込めませんでした。間違ったフォーマットのプログラムを読み込もうとしました。

と怒られる。エラーの箇所に飛んでみたらリソースファイルのimageListの定義だった。検索したら同じ問題にはまった人がいた。このブログによるとVisual Studio 2010のバグで、リソースファイルを手で修正すると回避できるとある。
僕はもう少し調べて、この問題を説明しているMicrosoftのブログを見付けた。64bit OSでアーキテクチャを指定してビルドすると、このバグにぶつかるとのこと。バグとは明記されていないけれど、これは明らかにバグだね。

ビルドしようとしたアプリケーションは、32bitのバイナリのDLLをリンクする必要があるのでアーキテクチャを32bitにしている。アーキテクチャを指定したプロジェクトがリソースファイルを持つときは、依存しているプロジェクトのアーキテクチャをAny CPUにしないといけないらしい。

このアプリケーションは3つのプロジェクトからなり、そのうちの1つはライブラリでほかの2つがそれに依存している。そこでライブラリのターゲットをAny CPUにしたら通るようになった。ライブラリから32bitのDLLをリンクしているが、特に問題は生じなかった。