【问题标题】:.NET application into 64-Bit: ODBC problem.NET 应用程序转换为 64 位:ODBC 问题
【发布时间】:2021-02-05 09:13:41
【问题描述】:

我目前正在开发一家公司提供的更大的 .NET 应用程序。当处理大量数据时,系统会出现内存不足的问题。经过一番研究,我决定采取步骤并将应用程序的目标平台更改为 64 位。在 Visual Studio 2017 中,可以更改项目的平台......当开始构建应用程序时,我在输出控制台中收到了几次警告 CNDL1138,但无论如何构建都是成功的。启动应用程序时,我收到不同的错误/异常消息:

  • 抛出异常:mscorlib.dll 中的“System.IO.FileNotFoundException”
  • 抛出异常:System.Data.dll 中的“System.Data.Odbc.OdbcException”
  • 抛出异常:System.Data.dll 中的“System.Data.Odbc.OdbcException”
  • 抛出异常:System.Windows.Forms.dll 中的“System.InvalidOperationException”

于是我开始一步步解决问题。我试图解决的第一件事是 ODCB 问题。启动问题时,会弹出一个窗口,提示驱动程序和应用程序不匹配。但是我检查了安装的驱动程序,它们是 64 位的,就像应用程序一样。我不知道驱动程序可能存在什么问题。

那么这里有没有人有同样的问题并且可以解决它?

(补充说明:我使用的是 Visual Studio 2017、.NET Framework 4.6.1,并使用 C# 进行编程)

【问题讨论】:

  • 您需要检查应用程序的依赖项是否支持 64 位。你用的是什么odbc驱动?你用它做什么?另一个常见的问题是原生依赖,但这里可能不是这样。
  • @JonasH 我是这个话题的新手。你能解释一下在哪里检查依赖项吗?我在 oracle12Home 和 sql server 中有 Microsoft 访问驱动程序、oracle。应用程序从全球可用的不同数据库中导入、导出数据

标签: c# .net dll odbc target-platform


【解决方案1】:

您可能知道 Odbc 是一个标准化的数据库接口。为了让它工作,它需要一个特定于实际数据库引擎的驱动程序。

我知道的一个具体问题是访问 odbc 引擎。 JET 驱动程序曾经很常见,但它只是 32 位的。替代品是 ACE driver,它同时存在于 x64 和 x86 变体中。这需要使用可再发行组件安装在系统上,据我所知,没有合法的方法可以在应用程序中包含 dll 文件。它也包含在 office 安装中(至少是我当时使用的变体),但是 office 默认使用所有组件的 x86 变体,您需要在安装过程中显式选择 x64。

我认为您可以在办公室安装 x86 的同时安装 x64 可再发行 ace 驱动程序,但我的记忆可能有问题。

我不知道 oracle 驱动程序是否存在类似问题。我怀疑 MSSQL 驱动程序的问题更简单,因为 64 位操作已成为标准的时间更长。

.Net 将按需解决大多数依赖项,通常这将在编译使用依赖项的第一段代码时完成,即在它第一次运行之前。检查是什么驱动程序导致您出现问题的一种方法是检查异常发生的位置,即它尝试使用哪种数据库。

【讨论】:

  • 当我打开 ODBC 数据源管理器(64 位)时,只会显示 64 位的驱动程序,我错了吗?我想在Visual Studi 2017中更改目标平台时更改了所有DLL,
  • @user15150542 .Net dll 通常针对 AnyCPU 并针对任何平台进行编译。但是有些组件,例如 odbc 驱动程序,是本地的和特定于平台的。关于如何解决和使用这些组件有很多规则,我对这些规则知之甚少,无法给出一个好的答案。可以使用Process Monitor 来准确监控应用程序尝试加载的 dll。
  • 好的,我明白了,我不知道 DLL 不是特定于平台的。谢谢你。我已经安装了 Process Monitor 并寻找两个版本之间的异常情况。
猜你喜欢
  • 2011-10-27
  • 1970-01-01
  • 1970-01-01
  • 2020-09-25
  • 1970-01-01
  • 2010-09-29
  • 1970-01-01
  • 2011-04-13
  • 2015-04-05
相关资源
最近更新 更多