OpenCvSharpでOpenCVのx64(64ビット)用のDLLを用いるとTypeInitializationException例外が発生することがあります。
TypeInitializationException例外が発生し
の追加情報が表示されます。
WindowsFormアプリやコンソールアプリのアプリケーションのデフォルトの設定では32ビットを優先して利用する動作になっています。このためビルドされたアプリケーションは32ビットアプリケーションとして実行されます。そのため32ビットアプリから64ビットのOpenCVのDLLを読み込もうとしてエラーになるようです。
ソリューションエクスプローラでプロジェクトのノードを選択し、右クリックのポップアップメニューの[プロパティ]を選択しプロジェクトの設定画面を表示します。設定画面の左側のカテゴリメニューから[ビルド]をクリックして選択します。(下図)
対策は以下の2つの方法があります。
デフォルトでは[32 ビットの優先]チェックボックスにチェックがついていますので、このチェックボックスのチェックを外します。
プラットフォームターゲットのコンボボックスはデフォルトでは"Any CPU"が選択されています。これを"x64"に変更します。
上記設定の変更によりTypeInitializationException例外の発生は解消します。
OpenCVのDLLを出力ディレクトリにコピーせず、OpenCVのDLLが見つからない場合も同様のエラーが発生します。この原因の場合はDLLが32ビット版でも発生します。ソリューションエクスプローラでDLLファイルのプロパティ[出力ディレクトリにコピー]を"コピーしない"から"常にコピーする"または"新しい場合はコピーする"に変更します。