PresentationCore、System.Data などのアセンブリ。
エラー メッセージを表示せずに質問に答えるのは嫌いです。しかし、この二次的な証拠は、質問に答えるのに十分です. まず、これはエラーではなく警告です。次のようになります。
警告 CS1607: アセンブリの生成 -- 参照されたアセンブリ 'System.Data.dll' は別のプロセッサをターゲットにしています
また、mscorlib.dll の 1 つも表示されます。および WPF プロジェクトの PresentationCore.dll。ここで何が起こっているかというと、これらのアセンブリは特別であり、混合モードのアセンブリです。つまり、ネイティブ コードとマネージ コードの両方が含まれています。ネイティブ コードはトラブルメーカーです。このようなアセンブリは、適切なプロセッサ フレーバーを対象とするプロジェクトでのみ使用できます。混同すると、実行時に BadImageFormatException が発生します。
これは .NET アセンブリの実際の問題ではありません。マシンには、実際にはこれらの DLL の2 つのバージョンが GAC に格納されています。1 つはプログラムが 32 ビット モードで実行される場合に使用され、もう 1 つは 64 ビット モードで使用されます。CLR は自動的に正しいものを選択します。
ただし、参照アセンブリのバージョンは 1 つだけです。これはc:\windows\microsoft.net に格納され、メタデータを読み取るためにコンパイラに渡すものです。それは常に x86 バージョンです。他にはないので、探す必要はありません。繰り返しますが、これは問題ではありません。参照アセンブリのメタデータのみがコンパイラによって使用され、そのコードは実行されません。また、メタデータはアセンブリのビット数に依存しません。
それでも、独自の混合モード アセンブリを作成する場合、これはすべて問題になる可能性があります。2 つのバージョンを提供する必要性を簡単に見落とす可能性があります。したがって、コンパイラが心配しているのは、プロジェクトの AnyCPU または x64 ビルドを要求したことです。ただし、x86 を対象とする場合にのみ参照アセンブリが機能することを検出します。少しきしみますが、あなたが間違っているという証拠がいくつかあり、プログラムを実行すると BadImageFormatException が発生する可能性があることを穏やかに思い出させてください。それ以外の場合は、フレームワーク参照アセンブリを独自の参照アセンブリと異なるものとして扱いません。
したがって、機能であり、バグではありません。それ以外の場合は、プログラムのビルドを妨げない単なる警告です。.NET には実行時に GAC で使用可能な適切なアセンブリがあることがわかっているため、この警告は無視しても問題ありません。注目すべきは、.NET 4.0 にはこの問題がなく、ILONLY メタデータ フラグがオフになっていない非常に異なる参照アセンブリを使用していることです。