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请求期间发生未处理的exception。 请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

exception详细信息:System.TypeLoadException:无法从程序集“Oracle.ManagedDataAccess,Version = 4.121.2.0,Culture = neutral,PublicKeyToken = 89b483f429c47342”加载类型“OracleInternal.Common.ConfigBaseClass”。

来源错误:

在执行当前Web请求期间生成了未处理的exception。 可以使用下面的exception堆栈跟踪来识别有关exception的起源和位置的信息。

堆栈跟踪:

[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.EFOracleProviderServices..ctor()+629 Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices..cctor()+28

[TypeInitializationException:’Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices’的类型初始值设定项引发exception。
Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices.get_Instance()+24

Web.Config中包含以下块:

  

             

注意:此服务器上还有其他项目,它们只是为.Net使用不同版本的Oracle客户端。 其他人都没有使用托管驱动程序。 我正在寻找一种方法来深入研究这个错误,一些暗示该类型的来源和加载方式。

来自NuGet的Oracle.ManagedDataAccess与在服务器上安装(通过Oracle客户端安装)并在GAC中注册的内容之间存在冲突。

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

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

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

 OraProvCfg /action:ungac /providerPath:Oracle.ManagedDataAccess 

您必须删除 GAC 的Oracle.ManagedDataAccess程序集(C:\ Windows \ Microsoft.NET \ assembly …)

使用命令工具gacutil删除程序集:

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

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

正如其他人所说,您需要从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 ,它的工作

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

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