web-dev-qa-db-fra.com

Erreur Oracle .Net ManagedDataAccess: impossible de charger le type 'OracleInternal.Common.ConfigBaseClass' à partir de l'assembly

J'ai un projet qui fonctionne localement, sur notre serveur de développement et sur notre serveur de production.

Lorsque j'essaye de l'exécuter sur le serveur de test, j'obtiens l'erreur ci-dessous, et je ne sais pas quoi faire à ce sujet au-delà de regarder mon écran en blanc. Astuces? Processus pour remonter le problème à sa source?

J'ai installé le package NuGet pour Oracle 12.2, etc.

Impossible de charger le type 'OracleInternal.Common.ConfigBaseClass' à partir de l'assembly 'Oracle.ManagedDataAccess, Version = 4.121.2.0, Culture = neutral, PublicKeyToken = 89b483f429c47342'. Description: une exception non gérée s'est produite lors de l'exécution de la demande Web en cours. Veuillez consulter la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.

Détails de l'exception: System.TypeLoadException: impossible de charger le type 'OracleInternal.Common.ConfigBaseClass' de l'assembly 'Oracle.ManagedDataAccess, Version = 4.121.2.0, Culture = neutral, PublicKeyToken = 89b483f429c47342'.

Erreur source:

Une exception non gérée a été générée lors de l'exécution de la demande Web actuelle. Les informations concernant l'origine et l'emplacement de l'exception peuvent être identifiées à l'aide de la trace de pile d'exceptions ci-dessous.

Trace de la pile:

[TypeLoadException: impossible de charger le type 'OracleInternal.Common.ConfigBaseClass' à partir de l'assembly 'Oracle.ManagedDataAccess, Version = 4.121.2.0, Culture = neutral, PublicKeyToken = 89b483f429c47342'.]
Oracle.ManagedDataAccess.EntityFramework.EntityFrameworkProviderSettings.Oracle.ManagedDataAccess.EntityFramework.EFProviderSettings.IEFProviderSettings.get_TracingEnabled () +.Oracle.ManagedDataAccess.EntityFrameworkFac.ForameFile ctor () +629 Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices..cctor () +28

[TypeInitializationException: l'initialiseur de type pour 'Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices' a levé une exception.]
Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices.get_Instance () +24

Le Web.Config contient les blocs suivants:

  <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>

ET

  <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>

REMARQUE: d'autres projets fonctionnent sur ce serveur, ils utilisent simplement une version différente du client Oracle pour .Net. Aucun des autres n'utilise uniquement le pilote géré. Je cherche un moyen de creuser dans cette erreur, un indice sur la provenance et le chargement de ce type.

26
Dylan Brams

Il existe un conflit entre Oracle.ManagedDataAccess de NuGet et celui qui est installé (par l'installation du client Oracle) sur un serveur et qui est enregistré dans GAC.

Désinscrire Oracle.ManagedDataAccess de GAC et vous vous débarrasserez de l'erreur: Exécutez la ligne de commande et accédez au répertoire:

{Oracle home}\product\{version}\client_64\ODP.NET\managed\x64

Vous devriez y trouver OraProvCfg.exe fichier. Exécutez la commande suivante pour désinscrire Oracle.ManagedDataAccess de GAC:

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

Vous devez supprimer l'assembly Oracle.ManagedDataAccess dans votre GAC (C:\Windows\Microsoft.NET\Assembly ... )

Utilisez l'outil de commande gacutil pour supprimer l'assembly:

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

19
g.breeze

A pu le corriger en remplaçant les références du projet par Oracle.ManagedDataAccess et Oracle.ManagedDataAccess.EntityFramework de celles installées par le gestionnaire de packages à celles installées par le programme d'installation du client Oracle. Les versions sont les mêmes mais le numéro de build est différent sur ces DLL

8
Greg Z.

Comme d'autres l'ont dit, vous devez supprimer Oracle.ManagedDataAccess de GAC.

Je cours {Oracle home}\product\12.1.0\dbhome_1\ODP.NET\managed\x64\unconfigure.bat et {Oracle home}\product\12.1.0\dbhome_1\ODP.NET\managed\x836\unconfigure.bat et ça a marché

5
Toolkit

Si la suppression du DLL du GAC n'est pas une option, envisagez d'obtenir la prochaine version d'Oracle.managedData.access 12.2.1 et placez-les simplement sur le serveur dans le répertoire bin. Ensuite, vous devez pour ajouter un assemblyBinding à votre fichier web.config.

De cette façon, vous obtenez en tirant la version 12.1.2 du GAC pendant l'exécution qui détectera l'erreur. Vous n'avez pas besoin de recompiler votre application avec la nouvelle version.

      <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

Il y a certainement quelque chose de bizarre avec ce problème. Je développais une application sur mon serveur local qui fonctionnait bien, mais j'ai eu cette erreur lorsque j'ai téléchargé l'application sur notre serveur. Le client a installé le client Oracle. Après avoir regardé ce fil, j'ai copié les deux DLL (Oracle.ManagedDataAccess.dll & Oracle.ManagedDataAccess.EntityFramework.dll) à partir du client Oracle et a remplacé les versions dans mon répertoire bin d'application. Cela a résolu le problème.

1
Helius 06

Dans mon scénario, j'ai une application console consommant un utilitaire de base de données de bibliothèque de classes. J'ai dû faire référence à Oracle.ManagedDataAccess également sur l'application console afin qu'il puisse trouver la DLL lors de l'exécution. Je ne sais pas si c'est la meilleure approche, mais cela a fonctionné pour moi.

1
Carlos ABS