You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows Server 2012上Oracle.ManagedDataAccess DLL版本兼容问题

.NET 4.5 Web服务部署到Windows Server 2012时Oracle.ManagedDataAccess.EntityFramework版本匹配循环问题

问题背景

原本连接Oracle 11g正常的.NET 4.5 Web服务,在数据库升级到19c后同步更新了Oracle.ManagedDataAccess与Oracle.ManagedDataAccess.EntityFramework版本,本地运行无异常,但部署到Windows Server 2012时出现版本不匹配的循环错误:修改配置版本为6.122.1.0时,系统提示需要6.121.2.0;改回6.121.2.0后,又要求6.122.1.0。

错误详情

服务器错误:System.IO.FileLoadException: 无法加载文件或程序集“Oracle.ManagedDataAccess.EntityFramework, Version=6.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342”或其依赖项之一。找到的程序集清单定义与程序集引用不匹配。(异常来自 HRESULT: 0x80131040)

当前Web.config配置片段

<configSections>
  <section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</configSections>

<providers>
  <provider invariantName="Oracle.ManagedDataAccess.Client" type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" /> 
</providers>

解决方案

1. 检查服务器GAC中的冲突版本

  • 打开服务器的GAC目录:C:\Windows\Microsoft.NET\assembly\GAC_MSIL,查看Oracle.ManagedDataAccess和Oracle.ManagedDataAccess.EntityFramework文件夹下的版本,若同时存在6.121.2.0和6.122.1.0两个版本,会导致加载混乱。
  • 使用VS命令提示符执行命令查看已安装版本:
    gacutil /l Oracle.ManagedDataAccess.EntityFramework
    
  • 卸载冲突版本(替换xxx为具体版本号):
    gacutil /u Oracle.ManagedDataAccess.EntityFramework,Version=xxx,PublicKeyToken=89b483f429c47342
    

2. 添加程序集绑定重定向

在Web.config的<runtime>节点下添加重定向规则,强制所有引用指向部署的目标版本(以6.122.1.0为例):

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="Oracle.ManagedDataAccess.EntityFramework" publicKeyToken="89b483f429c47342" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-6.122.1.0" newVersion="6.122.1.0" />
    </dependentAssembly>
    <dependentAssembly>
      <assemblyIdentity name="Oracle.ManagedDataAccess" publicKeyToken="89b483f429c47342" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-4.122.1.0" newVersion="4.122.1.0" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>

3. 验证部署的DLL版本一致性

  • 登录服务器,进入部署目录的bin文件夹,右键点击Oracle.ManagedDataAccess.EntityFramework.dll,选择「属性」→「详细信息」,确认文件版本与Web.config配置、绑定重定向的版本完全一致。
  • 若版本不一致,重新发布项目,确保项目引用中Oracle.ManagedDataAccess和Oracle.ManagedDataAccess.EntityFramework的「复制本地」属性设为True。

4. 检查服务器machine.config配置

  • 打开服务器的machine.config文件(32位:C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config;64位:C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config)。
  • 查看是否存在旧版本的oracle.manageddataaccess.client配置节或程序集绑定,若有则注释或更新为目标版本。

5. 确认本地项目引用版本匹配

在本地项目中,右键查看Oracle.ManagedDataAccess和Oracle.ManagedDataAccess.EntityFramework的引用属性,确保两个库的版本对应(Oracle EF库版本通常与主库版本匹配,如4.122.1.0对应6.122.1.0),且「复制本地」均设为True。

内容的提问来源于stack exchange,提问作者Jure

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 07:23:04