私の.NET 3.5 Windowsフォームを別の環境に展開しているときに、多くの無効なプロバイダーの問題が発生しました。
一部では機能しますが、他では機能しません。
誰かが私を助けてくれませんか?どのバージョンの「Oralce.DataAccess.dll」を使用するかをどのようにして決定しますか、つまり9または10または11または9.1。*または10.1。*または11. *または12など.
アプリケーションをインストールするサーバーに依存しますか?または
バックエンドのOracleデータベースに依存していますか?
100%マネージドプロバイダー を使用するという概念を次に説明します。これにより、これから説明する詳細を知る必要がなくなります。ここでの唯一の問題は、.net 4.0へのアップグレードが必要になる可能性があることです。
TLDRバージョン:
完全版:
まず、古いアンマネージドプロバイダーのコンポーネント(新しい12c 100%マネージドプロバイダーではない)を確実に理解しましょう。それは2つの部分で構成されています。
簡単に言えば、Oracle.DataAccess.dllはほぼラッパーにすぎず、.net命令を非管理対象クライアントのOracle-NET命令に変換します。
つまり、Oracle.DataAccessをロードすると、必要なアンマネージクライアントdllを見つけようとする順序があります。 Oracleドキュメント から:
Oracle.DataAccess.dllは、次の順序に基づいて、依存するアンマネージDLL(Oracleクライアントなど)を検索します。
1.アプリケーションまたは実行可能ファイルのディレクトリ。
2.アプリケーション構成またはweb.configで指定されたDllPath設定。
3. machine.configで指定されたDllPath設定。
4.Windowsレジストリで指定されたDllPath設定。
HKEY_LOCAL_MACHINE\Software\Oracle\ODP.NET\version\DllPath
5.Windows PATH環境変数で指定されたディレクトリ。
これは、マシンに複数のクライアントがインストールされている場合に関係するため、問題の一部になる可能性があります。その場合は、構成でdllPath構成変数を使用するのが簡単です。
<configuration>
<Oracle.dataaccess.client>
<add key="DllPath" value="c:\Oracle\product\1.1.0-xcopy-dep\BIN"/>
</Oracle.dataaccess.client>
</configuration>
さて、あなたの質問に直接答えてください-OracleがOracle.DataAccess.dllをそのクライアントと一致させないことをサポートしているとは思いません(少なくとも後方では)あなたの最善の策は、アプリのインストールでODP.netをインストールすることです- xcopy version は最小であり、「インスタントクライアント」が含まれます。または、最小システム要件について考える必要があります。システムには、少なくともバージョンXのodp.netがインストールされている必要があります。その後、ターゲットシステムに新しいバージョンのクライアントがある場合、その最小DLLに対してコンパイルし、パブリッシャーポリシーのリダイレクトに依存できます。
もちろん、これは私に建築について尋ねるようにも促します。ユーザーにOracleアカウントの入力を求める予定はありますか?そうでない場合は、アプリケーションが使用する共有サービスアカウントを保護する方法に注意する必要があります。クライアントに代わってOracle呼び出しを行うWebサービスを呼び出す方がよい場合があります。これにより、別のセキュリティ層が提供され、クライアントの展開が簡素化されます。
ほとんどのバージョンのODP.netは、データベースサーバーと下位互換性があります。10gデータベースで11gプロバイダーを確実に使用できます。
システムにクライアントまたはOracleインスタンスがインストールされている場合。フォルダ名を確認してください
Oracle_HOME\product\11.2.0\dbhome_1\ODP.NET\bin\2.x
ここにファイルがあります-Oracle.DataAccess.dll
参照に含めてください。
時々あなたはCould not load file or Assembly 'Oracle.DataAccess' or one of its dependencies.
正しいDLLがあり、問題は別の場所にあります。
それは私にも起こり(このトピックはそれを理解するのに大いに役立ちました)、それはIIS)のアプリケーションプールの構成でした(32ビットアプリケーションを許可しない人(詳細設定))。
Oracleサーバーがバージョン10.2以降の場合は、Oracle 12で提供されるマネージドODP.NETバージョンの使用を検討してください。
どうやら、それは10 MB未満の1つの依存関係です。 Oracle(インスタント)クライアントに依存するODP.NETバージョンに比べて、アプリケーションをさまざまなシステムに簡単にデプロイできるはずです。また、インストールされているOracleクライアントを気にする必要もなくなります。
しかし、彼らはそれが「.NET Framework 4.5.1の最新バージョンで動作する」と述べているので、私が理解していることから、アプリケーションを4.5.1にアップグレードする必要がありますが、おそらくそれは特定の機能(Entity Frameworkサポートなど)。
http://www.Oracle.com/technetwork/topics/dotnet/index-085163.html
実際、正解はないと思います。それはすべて、アプリケーションを実行するプロセッサアーキテクチャ(ビット)、使用するOCIクライアントのバージョンなどに依存します。
Oracleの相互作用を1つのクラスにラップし、Reflectionを使用して使用可能なバージョンを見つけることが最も有用であることがわかりました。
バージョン番号について:ODP.netアセンブリのバージョンは、OCIクライアントインストールのバージョンと一致している必要があります。 12. * OCIクライアントと10. * ODP.netアセンブリを混在させるのは悪い考えです。
たぶん この記事 も参考になります。