NLog无法向Oracle数据库发送日志,提示找不到Oracle.ManagedDataAccess程序集
报错原因分析
- 报错信息中提示
PublicKeyToken=null,说明NLog加载程序集时默认匹配无强签名的Oracle.ManagedDataAccess.dll,但官方发布的Oracle驱动dll默认带有强签名,公钥Token固定为89b483f429c47342,签名不匹配导致系统判定找不到对应程序集。 - 程序集版本/框架不匹配:你本地存放的Oracle.ManagedDataAccess.dll的目标.NET框架版本、编译架构(x86/x64)和当前项目运行环境不匹配,也会触发文件加载失败。
解决方案
1. 调整NLog配置的dbProvider参数
在dbProvider属性中补充强签名匹配信息,修改后配置如下:
<target xsi:type="Database" name="oracle" dbProvider="Oracle.ManagedDataAccess.Client.OracleConnection, Oracle.ManagedDataAccess, Version=你当前使用的Oracle驱动版本号, Culture=neutral, PublicKeyToken=89b483f429c47342" connectionString="${ui-connection-strings:item=oracle}" keepConnection="true">
如果你的项目是.NET Core/.NET 5+环境,使用的是Oracle.ManagedDataAccess.Core驱动,则修改为:
dbProvider="Oracle.ManagedDataAccess.Client.OracleConnection, Oracle.ManagedDataAccess.Core"
2. 校验程序集匹配性
- 右键本地的Oracle.ManagedDataAccess.dll,选择【属性】-【详细信息】,确认文件版本和配置中填写的Version参数完全一致。
- 确认驱动对应运行框架:.NET Framework项目使用Oracle.ManagedDataAccess,.NET Core/.NET 5+项目优先使用Nuget安装的Oracle.ManagedDataAccess.Core。
- 确认驱动编译架构和程序运行的进程架构一致,避免x86驱动在x64进程加载的问题。
3. 补充程序集绑定配置(.NET Framework项目可选)
如果调整配置后仍报错,可以在App.config/Web.config的<runtime>节点下添加绑定重定向规则,强制加载对应版本的驱动:
<dependentAssembly> <assemblyIdentity name="Oracle.ManagedDataAccess" publicKeyToken="89b483f429c47342" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-你当前使用的驱动版本号" newVersion="你当前使用的驱动版本号" /> </dependentAssembly>
内容的提问来源于stack exchange,提问作者VicAc
相关产品推荐
相关产品推荐

