自分用メモ

 

■事象

 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リリースしたくない