自分用メモ
■事象
64bitの環境でAnyCPUでビルドしたexeを実行した際に落ちる場合がある。dllとリンクできていないようで以下のような例外メッセージが発生する。
ファイルまたはアセンブリ 'Oracle.DataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342'、またはその依存関係の 1 つが読み込めませんでした。間違ったフォーマットのプログラムを読み込もうとしました。
■解決方法
ビルドの設定で32bit優先を外す。初期設定では32bit優先となっている。
図はVisualStudio2017でプロジェクトのプロパティを表示した画面。
■原因
64bit版のdllを読み込んでほしい場合にも関わらず、32bit版の方にリンクされてしまうことで実行時例外が出る。
ビルドターゲットをx64とすることで64bit環境でもエラーを発生させずに動作させることが可能だが、32bit環境で動作させる場合には再ビルドを行う必要があり、リリースの手間が増える(32bitでも動作させたい場合)。できればAnyCPUビルドで32bit環境、64bit環境両方で動作できるようにしておきたい。
そもそも、もう2017年なのだから32bit環境用のexeリリースしたくない
