これに対処するにはいくつかの方法があります。最初の 1 つは最も単純です。アプリが実際にターゲット アーキテクチャに依存しているという事実を認めます。そして、その AnyCPU は適切な設定ではありません。x64 から取得した巨大な仮想アドレス メモリ空間が必要になることは非常にまれです。特に、x86 でも動作させる必要があるためです。EXE のプラットフォーム ターゲットを x86 に設定すれば完了です。
2 つ目は、これは単に展開の問題であるという結論です。アプリが 64 ビット オペレーティング システムにインストールされている場合は混合モード アセンブリの x64 ビルドをコピーし、32 ビット オペレーティング システムでは x86 ビルドをコピーするだけです。これを処理するセットアップ プロジェクトを作成する必要があります。最も簡単な方法は、それらを 2 つ作成することです。また、唯一の方法です。
3 つ目は、どちらの方法でも機能する場所についてベルが付いているもので、間違いなく質問しているものです。これには、コード、プロジェクト、およびインストーラーの変更が必要です。「x86」や「x64」などの名前の 2 つのサブディレクトリを作成するビルド後のイベントを作成する必要があります。そして、それぞれのバージョンの DLL をそれらにコピーします。これにより、CLR がこれらのアセンブリを見つけられなくなります。
コードでは、AppDomain.CurrentDomain.AssemblyResolve イベントのイベント ハンドラーを記述する必要があります。アセンブリの型を使用する前に、Main() メソッドでサブスクライブします。イベント ハンドラーは、Assembly.LoadFrom() を使用して、IntPtr.Size の値に基づいてサブディレクトリから正しいアセンブリを読み込む必要があります。64 ビット モードで実行する場合は 8 です。
さらに別のアプローチについて言及する必要がありますが、それは一般的に SO で眉をひそめています。両方のアセンブリを GAC にインストールします。すべてが自動です。