そのため、私が理解しているように、問題は、Oracle.DataAccess.dllがアプリと同じディレクトリにあるときに、下位レベルのhomies(ociなど)が見つからなかったため、互換性エラーが発生したことでした。
ユーザーが自分のマシンに他に何をインストールしたかに関係なく、アプリケーションをODAC 11 xcopyデプロイメントで動作させるには、次の2つのことを行う必要があります。
- プロセスのPATH環境変数を設定します。 (私はすでにこれを行っていました。)
-
プロセスのORACLE_HOME環境変数を設定します。 (私はこれをしていませんでした。)
Environment.SetEnvironmentVariable("PATH", Environment.CurrentDirectory + "\\oracle\\11.1\\odac;" + Environment.CurrentDirectory + "\\oracle\\11.1\\odac\\bin;", EnvironmentVariableTarget.Process); Environment.SetEnvironmentVariable("ORACLE_HOME", Environment.CurrentDirectory + "\\oracle\\11.1\\odac", EnvironmentVariableTarget.Process);
編集: Oracleは、環境問題だけでなく、ターゲットマシンでファイルの1つが欠落している場合にも、このエラーをスローすることに注意することも重要です。 「bin」と呼ばれるディレクトリを無視するようにSubversionが設定されていたため、環境設定にもかかわらず、他のマシンでも同じエラーが発生しました。そのため、OraOpsDLLがクライアントにコピーされていませんでした。