「ファイルまたはアセンブリ '***'、またはその依存関係の 1 つが読み込めませんでした。間違ったフォーマットのプログラムを読み込もうとしました。(Could not load file or assembly '***' or one of its dependencies. An attempt was made to load a program with an incorrect format.)」
ファイルまたはアセンブリが依存しているファイルは、dumpbinで調べられます。
次のそれぞれの状況によって、対処法が異なります。
プラットフォーム ターゲットは既定で[Any CPU]となっているため、これと異なる設定のアセンブリを読み込むとBadImageFormatException例外が発生します。よってアセンブリのプラットフォーム ターゲットを確認し、それに合うようにターゲットを修正します。
32ビット用と64ビット用の2つのDLLがあるとき、Visual Studioではプロジェクトのプラットフォームによらず1つのDLLしか指定できません。それゆえプラットフォーム ターゲットを変更したときに、プラットフォームの異なるアセンブリを参照しているとしてBadImageFormatException例外が発生します。BadImageFormatException クラス (System) | MSDN
この問題はVisual Studioを用いず、そのプロジェクト ファイルを直接編集することで解決できます。たとえばそこで対象のDLLが、
<HintPath>x86\sample.dll</HintPath>
のように指定されているならば、
<HintPath>$(Platform)\sample.dll</HintPath>
と書き換えることで、Visual Studioでターゲットを切り替えたときに、参照するファイルも同時に切り替えられます。.net - Targeting both 32bit and 64bit with Visual Studio in same solution/project - Stack Overflow
ただしこの方法では$(Platform)の文字列とフォルダの名前が一致している必要があるため、それが異なる場合には
<Reference Include="***"> <HintPath Condition="'$(Platform)' == 'x86'">Win32\sample.dll</HintPath> <HintPath Condition="'$(Platform)' == 'x64'">x64\sample.dll</HintPath> </Reference>
のようにCondition属性を用い、参照するファイルをそれぞれ指定します。MSBuild Conditions | MSDN