【发布时间】:2019-08-04 07:15:16
【问题描述】:
这是一个更新 Oracle 数据库的控制台应用程序。它指的是 32 位的 Oracle.DataAccess.dll。这是数据库操作的核心代码。
using (OracleConnection connection = new OracleConnection(DataSource))
{
using (OracleCommand cmd = new OracleCommand())
{
try
{
cmd.CommandText = paraText;
cmd.CommandType = CommandType.Text;
cmd.Connection = connection;
cmd.Connection.Open();
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
FileLog.Error("UpdateActiveStatus", ex, LogType.Error);
}
finally
{
cmd.Connection.Close();
cmd.Connection.Dispose();
}
}
}
我将控制台应用程序平台目标设置为 x64,而 oracle dll 为 32 位。但它有效!为什么?在我看来,x64 应用程序不能引用 x86 dll。
为了确保应用程序在 x64 下运行,我转到任务管理器并发现控制台应用程序进程确实处于 x64 模式。
为什么?带有 32 位 dll 的 x64 控制台应用程序,没有任何格式错误的 dll 异常?
编辑:这里是关于版本的更多信息。
编辑: 我得到的结论是它现在从 GAC 中找到了这个 x64 dll。但是它怎么知道它应该使用哪个版本呢?我的本地机器上安装了不同的 oracle 客户端。
【问题讨论】:
-
您确定您有 32 位 Oracle DLL 吗?检查Sigcheck
-
@wernfried-domscheit,当然。我更新了一些信息。这可以确认这是一个 32 位的 oracle dll。
-
检查 Process Monitor 实际加载了哪个 DLL。也许它是从优先于本地文件的 GAC 加载的。
-
嗨@wernfried-domscheit,还有其他工具可以检测它实际加载的dll吗?由于公司计算机的政策,Process Monitor 无法在我的计算机上启动。
-
嗨@wernfried-domscheit,我终于找到了答案。我在日志文件中记录了 typeof(OracleConnection).Assembly.Location。结果是 C:\Windows\assembly\GAC_64\Oracle.DataAccess\2.112.3.0__89b483f429c47342\Oracle.DataAccess.dll