web-dev-qa-db-ja.com

Oracle .Net ManagedDataAccessエラー:アセンブリからタイプ 'OracleInternal.Common.ConfigBaseClass'をロードできませんでした

ローカル、開発サーバー、および運用サーバーで動作するプロジェクトがあります。

テストサーバーで実行しようとすると、以下のエラーが表示されます。画面をじっと見つめる以外に、どうすればよいかわかりません。ヒント?問題をその原因まで追跡するプロセス?

Oracle 12.2などのNuGetパッケージをインストールしました。

アセンブリ 'Oracle.ManagedDataAccess、Version = 4.121.2.0、Culture = neutral、PublicKeyToken = 89b483f429c47342'からタイプ 'OracleInternal.Common.ConfigBaseClass'をロードできませんでした。説明:現在のWeb要求の実行中に未処理の例外が発生しました。エラーの詳細およびコードのどこで発生したかについては、スタックトレースを確認してください。

例外の詳細:System.TypeLoadException:アセンブリ「Oracle.ManagedDataAccess、Version = 4.121.2.0、Culture = neutral、PublicKeyToken = 89b483f429c47342」からタイプ「OracleInternal.Common.ConfigBaseClass」をロードできませんでした。

ソースエラー:

現在のWeb要求の実行中に、未処理の例外が生成されました。例外の発生源と場所に関する情報は、以下の例外スタックトレースを使用して特定できます。

スタックトレース:

[TypeLoadException:アセンブリ 'Oracle.ManagedDataAccess、Version = 4.121.2.0、Culture = neutral、PublicKeyToken = 89b483f429c47342'からタイプ 'OracleInternal.Common.ConfigBaseClass'をロードできませんでした。]
Oracle.ManagedDataAccess.EntityFramework.EntityFrameworkProviderSettings.Oracle.ManagedDataAccess.EntityFramework.EFProviderSettings.IEFProviderSettings.get_TracingEnabled()+0 Oracle.ManagedDataAccess.EntityFramework.EFProviderSettings.InitializeProviderSettings()+111 Oracle.ManagedDataAccess.EntityFramework.EFOracleProviders。 ctor()+629 Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices..cctor()+28

[TypeInitializationException: 'Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices'の型初期化子が例外をスローしました。]
Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices.get_Instance()+24

Web.Configには、次のブロックが含まれています。

  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.Microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <section name="Oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
  </configSections>

そして

  <Oracle.manageddataaccess.client>
    <version number="*">
      <dataSources>
        <dataSource alias="PVMDataSource" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=pdxcludds108.pacificorp.us)(PORT=11086))(CONNECT_DATA=(SERVICE_NAME=DDS1086.PACIFICORP.US))) " />
      </dataSources>
    </version>
  </Oracle.manageddataaccess.client>
  <connectionStrings>
    <add name="OracleDbContext" providerName="Oracle.ManagedDataAccess.Client" connectionString="User Id=USERID;Password=WORKINGPASSWORD;Data Source=PVMDataSource" />
    <add name="PVMEntities" connectionString="metadata=res://*/Models.PVMModel.csdl|res://*/Models.PVMModel.ssdl|res://*/Models.PVMModel.msl;provider=Oracle.ManagedDataAccess.Client;provider connection string=&quot;DATA SOURCE=pdxcludds108.pacificorp.us:11086/DDS1086.PACIFICORP.US;PASSWORD=XXXXXXX;PERSIST SECURITY INFO=True;USER ID=XXX&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>

注:このサーバーで動作するプロジェクトは他にもあります。それらは、.Net用のOracleクライアントの異なるバージョンを使用しているだけです。他のどれもManagedドライバーのみを使用していません。私はこのエラーを掘り下げる方法、そのタイプのソースおよびロード元に関するヒントを探しています。

26
Dylan Brams

NuGetのOracle.ManagedDataAccessと(Oracleクライアントのインストールによって)サーバーにインストールされ、GACに登録されているものとの間に競合があります。

GACからOracle.ManagedDataAccessの登録を解除すると、エラーがなくなります。コマンドラインを実行して、ディレクトリに移動します。

{Oracleホーム}\product\{version}\client_64\ODP.NET\managed\x64

そこにOraProvCfg.exeファイルがあります。次のコマンドを実行して、GACからOracle.ManagedDataAccessの登録を解除します。

OraProvCfg /action:ungac /providerPath:Oracle.ManagedDataAccess 
25
Jan Palas

removeでOracle.ManagedDataAccessアセンブリを[〜#〜] gac [〜#〜](C:\ Windows\Microsoft.NET\Assembly ...)

コマンドツールgacutilを使用して、アセンブリを削除します。

C:\ Program Files(x86)\ Microsoft SDKs\Windows\YOUR_VERSION\bin\NETFX 4.6.1 Tools> gacutil/u Oracle.ManagedDataAccess

19
g.breeze

プロジェクト内の参照を、パッケージマネージャーによってインストールされたものからOracleクライアントインストーラーによってインストールされたものにOracle.ManagedDataAccessおよびOracle.ManagedDataAccess.EntityFrameworkに置き換えることで修正できました。バージョンは同じですが、ビルド番号はこれらのDLLで異なります

8
Greg Z.

他の人が言ったように、GACからOracle.ManagedDataAccessを削除する必要があります。

走る {Oracle home}\product\12.1.0\dbhome_1\ODP.NET\managed\x64\unconfigure.batおよび{Oracle home}\product\12.1.0\dbhome_1\ODP.NET\managed\x836\unconfigure.batそしてそれは働いた

5
Toolkit

GACからDLLを削除することはオプションではない場合、次のバージョンのOracle.managedData.access 12.2.1を取得し、それらを単にbinディレクトリ内のサーバーに配置することを検討してください。 web.configファイルにassemblyBindingを追加します。

このようにして、エラーが発生するランタイム中にGACから12.1.2バージョンをプルすることになります。新しいバージョンに対してアプリを再コンパイルする必要はありません。

      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-12.1.2.0" newVersion="12.2.1.0" />
      </dependentAssembly>
1
Karl

この問題には間違いなく奇妙なことがあります。ローカルサーバーでアプリを開発していましたが、正常に動作しましたが、サーバーにアプリをアップロードするとこのエラーが発生しました。サーバーにOracleクライアントがインストールされています。このスレッドを見た後、2つのDLL(Oracle.ManagedDataAccess.dllOracle.ManagedDataAccess.EntityFramework.dll)Oracleクライアント内から、app binディレクトリのバージョンを置き換えました。これで問題が修正されました。

1
Helius 06

私のシナリオでは、クラスライブラリデータベースユーティリティを使用するコンソールアプリケーションがあります。コンソールアプリケーションでもOracle.ManagedDataAccessを参照する必要があったため、ランタイムでdllを見つけることができました。これが最善のアプローチであるかどうかはわかりませんが、私のために働いた。

1
Carlos ABS