Oracle DB 10がインストールされているマシンではODP.NET 11 xcopyデプロイメントが機能しないのはなぜですか?

StackOverflow https://stackoverflow.com/questions/491876

  •  20-08-2019
  •  | 
  •  

質問

.exe ファイルが存在するディレクトリの下に、ODAC 11 のローカル バージョンを使用するアプリがあります。ユーザーがマシンに他に何をインストールしているかに関係なく、アプリでローカルの ODAC 11 を使用するようにしたいという考えです。

Oracle.DataAccess.dll は .exe と同じディレクトリにあります。

クライアント マシンに Oracle クライアントがインストールされていない場合は正常に動作しますが、Oracle Database 10.2.0.something がインストールされているマシンで起動するとエラーが発生します。

The type initializer for 'Oracle.DataAccess.Client.OracleConnection' threw an exception.

[Stack Trace]

The provider is not compatible with the version of Oracle client
OracleException
   at Oracle.DataAccess.Client.OracleInit.Initialize()
   at Oracle.DataAccess.Client.OracleConnection..cctor()

これはランタイム バインディング ポリシーと関係があると思いますが、Google で「Oracle/ODAC/ODP.NET ランタイム バインディング ポリシー」を検索しても有用なものは見つかりませんでした。

問題を解決する方法を知っている人はいますか?

この特定の問題ではない場合、誰かが私がやりたいことを行う方法の概要を教えてくれませんか。アプリケーションが必ず ODAC 11 を使用するようにしてください。

役に立ちましたか?

解決

したがって、私が理解しているように、問題は、Oracle.DataAccess.dllがアプリと同じディレクトリにあるにもかかわらず、その下位レベルの仲間(ociなど)を見つけることができず、したがって互換性エラーが発生したことでした。

ユーザーがマシンに他に何をインストールしたかに関係なく、アプリケーションを ODAC 11 xcopy デプロイメントで動作させたい場合は、次の 2 つのことを行う必要があることがわかりました。

  1. プロセスの PATH 環境変数を設定します。(私はすでにこれを行っていました。)
  2. プロセスの 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 を設定していたため、OraOps DLL がクライアントにコピーされなかったためです。

他のヒント

<のhref =「http://alderprogs.blogspot.com/2009/04/deploying-odpnet-with-oracle-instant.html」のrelで発見「Oracleインスタントクライアントと展開ODP.NET」と題した記事を=「nofollowを」> http://alderprogs.blogspot.com/2009/04/deploying-odpnet-with-oracle-instant.html には、ストリップダウンを実現する方法の最良の説明について私のためにあったものを与えましたお使いのアプリケーションとのxcopyタイプの展開。サポートのために必要な唯一の5のOracleのDLLます。

オビ=ワン・ケノービとジョシュKodroffによって答えは私の経験と一致する重要な追加情報を提供して言った。

それに追加:のhttp:// WWW。 brothersincode.com/post/Oracle-ODPnet-xcopy-deployment-for-aspnet.aspxする

ODP.NET ドライバで、すでにインストールされているものではなく、ローカル フォルダにある oci.dll のコピーを使用するように強制したいとします。

どちらかの方法でこれを強制できます

  • システムが最初に oci.dll のコピーを見つけるように PATH 変数を設定します (Josh Kodroff による回答のように)

または

  • app.config (または web.config) の ODP.NET 構成セクションを使用して、「DllPath」の値を明示的に設定できます。

詳細については、を参照してください。 http://ora-00001.blogspot.com/2010/01/odpnet-minimal-non-intrusive-install.html そして http://database.in2p3.fr/doc/oracle/Oracle_Database_11_Release_1_(11.1)_Documentation/win.111/e10927/featConfig.htm

は、Oracleクライアント10.2.0.1または10.2.0.2を使用している場合は、Oracleのノート215255.1を使用すると、該当する場合はパッチセットが、それは問題を修正10.2.0.3ことを示しています。 10.2.0.3データベースのパッチ(852メガバイト)を取得し、クライアントのホームにパッチを適用。はい、それは完全なデータベース・サーバーのパッチセットだが、それは同様にクライアントに適用されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top