首页 文章

Oracle .Net ManagedDataAccess错误:无法从程序集中加载'OracleInternal.Common.ConfigBaseClass'类型

提问于
浏览
25

我有一个在本地,我们的开发服务器和我们的 生产环境 服务器上工作的项目 .

当我尝试在测试服务器上运行它时,我得到下面的错误,除了茫然地盯着我的屏幕,我不知道该怎么办 . 提示?将问题追溯到其来源的流程?

我已经为Oracle 12.2等安装了NuGet包 .

无法从程序集“Oracle.ManagedDataAccess,Version = 4.121.2.0,Culture = neutral,PublicKeyToken = 89b483f429c47342”加载类型“OracleInternal.Common.ConfigBaseClass” . 描述:执行当前Web请求期间发生未处理的异常 . 请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息 . 异常详细信息:System.TypeLoadException:无法从程序集 'Oracle.ManagedDataAccess,版本= 4.121.2.0文化=中性公钥= 89b483f429c47342' 加载类型 'OracleInternal.Common.ConfigBaseClass' . 源错误:在执行当前Web请求期间生成了未处理的异常 . 可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息 . 堆栈跟踪:[TypeLoadException:无法从组件加载类型 'OracleInternal.Common.ConfigBaseClass' 'Oracle.ManagedDataAccess,版本= 4.121.2.0文化=中性公钥= 89b483f429c47342'] Oracle.ManagedDataAccess.EntityFramework.EntityFrameworkProviderSettings.Oracle . ManagedDataAccess.EntityFramework.EFProviderSettings.IEFProviderSettings.get_TracingEnabled()0 Oracle.ManagedDataAccess.EntityFramework.EFProviderSettings.InitializeProviderSettings()111 Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices..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客户端 . 其他人都没有使用托管驱动程序 . 我正在寻找一种方法来深入研究这个错误,一些暗示该类型的来源和加载方式 .

6 回答

  • 1

    NuGet的 Oracle.ManagedDataAccess 与服务器上安装的(通过Oracle客户端安装)之间存在冲突,并且已在GAC中注册 .

    从GAC取消注册 Oracle.ManagedDataAccess ,您将摆脱错误:运行命令行并导航到目录:

    \ product \ \ client_64 \ ODP.NET \ managed \ x64

    你应该找到 OraProvCfg.exe 文件 . 运行以下命令从GAC取消注册 Oracle.ManagedDataAccess

    OraProvCfg /action:ungac /providerPath:Oracle.ManagedDataAccess
    
  • 8

    您必须在 GAC (C:\ Windows \ Microsoft.NET \ assembly ...)中使用 remove Oracle.ManagedDataAccess程序集

    使用命令工具gacutil删除程序集:C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ YOUR_VERSION \ bin \ NETFX 4.6.1工具> gacutil / u Oracle.ManagedDataAccess

  • 23

    能够通过将项目中的引用替换为Oracle.ManagedDataAccess和Oracle.ManagedDataAccess.EntityFramework从包管理器安装的那些引用到oracle客户端安装程序安装的引用来修复它 . 版本相同,但这些DLL上的内部版本号不同

  • -1

    正如其他人所说,您需要从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 并且它有效

  • 19

    这个问题肯定有些奇怪 . 我正在我的本地服务器上开发一个应用程序运行良好,但当我将应用程序上传到我们的服务器时出现此错误 . 服务器已安装oracle客户端 . 在查看此线程后,我从oracle客户端中复制了两个DLL( Oracle.ManagedDataAccess.dllOracle.ManagedDataAccess.EntityFramework.dll ),并替换了我的app bin目录中的版本 . 这解决了这个问题 .

  • 5

    您需要安装Oracle客户端驱动程序 . .NET包不包含它们;它们提供了从托管世界到非托管世界的翻译 . 驱动程序处于非托管状态,需要正确安装 .

相关问题