我们在我们的一个环境中看到了类似的问题,以下解决了我们的问题;
当 Oracle Data Provider for .NET 安装在 Web 服务器上时,根据您在安装期间选择的内容,它会将条目写入 machine.config 文件(位于 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config \ 取决于框架版本)。似乎不同版本的 ODP.NET 安装程序对 machine.config 执行不同的操作(我们的一些服务器在 machine.config 中没有指定版本号,而其他服务器则为 oracle 托管客户端指定了特定版本号)
根据安装的版本,它会添加如下几行:
...
<section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
...
<oracle.manageddataaccess.client>
<version number="4.121.2.0">
<settings>
<setting name="TNS_ADMIN" value="C:\oracle\client\product\12.1.0\client_1\network\admin" />
</settings>
</version>
</oracle.manageddataaccess.client>
...
这些条目包含引用 ODP.NET oracle 客户端版本的特定版本号。我们正在使用与 4.121.2.0 不匹配的托管客户端库(版本 12.2.1100 nuget 包)的 4.122.1.0 版本构建我们的应用程序
我们通过从此标记中删除 oracle 管理的客户端库版本来更改上述条目:
<section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess" />
并为此标签的版本号指定一个“*”:
<oracle.manageddataaccess.client>
<version number="*">
<settings>
<setting name="TNS_ADMIN" value="C:\oracle\client\product\12.1.0\client_1\network\admin" />
</settings>
</version>
</oracle.manageddataaccess.client>
如果您需要指定特定的版本号,请确保您的代码使用相同的版本号编译。
如果它们存在,您还可以从 machine.config 中删除所有这些条目,并根据您的配置在应用程序 web.config 中指定它们。