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.dll
和Oracle.ManagedDataAccess.EntityFramework.dll
),并替换了我的app bin目录中的版本。 这解决了这个问题。
您需要安装Oracle客户端驱动程序。 .NET包不包含它们; 它们提供了从托管世界到非托管世界的翻译。 驱动程序处于非托管状态,需要正确安装。