【问题标题】:VB.Net compiled for 32 bit running on 64 bit machine using SQLiteVB.Net 编译为使用 SQLite 在 64 位机器上运行的 32 位
【发布时间】:2012-02-20 04:05:55
【问题描述】:

情况是这样的——我有一个为 X86 机器编译的 vb.net exe,使用 2 个 dll ......因为其中一个 dll 只提供 32 位,我不想处理 32/64版本,我在编译选项中强制使用 32 位,一切都很好。现在我有一个 64 位工作站,它抛出一个关于 sqlite.dll 的错误(下面的错误 #1)......在阅读了周围之后,我开始了解很多人都遇到了这个问题。我尝试用 64 位版本的 sqlite 替换客户端计算机上的 dll,但没有成功(错误 #2)。我在某处读到 64 位版本需要 VC 2010 重新发行版,但这不起作用。我无法将此应用程序编译为 64 位,因为其他 dll 是 32 位。非常感谢任何帮助。

错误 #1 - System.InvalidOperationException:没有与此命令关联的连接

错误 #2 - System.BadImageFormatException: 无法加载文件或程序集 'System.Data.SQLite, Version=1.0.79.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139' 或其依赖项之一.试图加载格式不正确的程序。 文件名:'System.Data.SQLite, Version=1.0.79.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139'

【问题讨论】:

  • 最后一点...我知道这不是权限问题,因为我可以在同一用户下使用 SQLite 数据库浏览器手动编辑 sqlite 文件。

标签: vb.net sqlite 64-bit 32-bit


【解决方案1】:

您确定您的应用程序是在 x86 而非 AnyCPU 下编译的吗?在处理为 x86 编译的 SQLLite 等 dll 时,您的进程必须在 x86 模式下运行。

【讨论】:

  • 绝对确定。如果我什至摆弄这个设置(将其更改为 64 或任何值),我的其他 dll 会立即破坏程序。
  • 您正在为您的应用程序部署 x86 版本的 SQLLite dll,对吗?是否有可能 SQLLite 的 x64 版本已在 GAC 中注册并以某种方式从那里获取? .NET 将在本地 bin 目录之前探测 GAC 的程序集。
  • 对于 sh*%# 和咯咯笑,尝试让您的应用在启动时使用 Assembly.LoadFrom 手动加载 SQLLite 程序集
  • 我相当有信心该程序正在选择 x86 SQLite 版本,但是在程序运行它加载了哪个版本的 dll 之后,我有什么方法可以确定吗?另外,如果我将应用程序编译为 X86,它不只适用于 32 位 dll 吗?客户端机器是 64 位的,我知道它正在加载哪个版本的 dll,因为除了我提供的那个之外,这台计算机没有任何其他 SQLite dll。
  • 当 AppDomain 实际加载程序集时会发生问题,因此您无法在程序本身的上下文中在运行时看到它。您可以检查 Fusion 日志查看器以查看并验证您的 SQLLite dll 是从哪里加载的。
猜你喜欢
  • 2011-02-14
  • 2011-01-14
  • 2013-10-20
  • 2016-05-17
  • 2017-07-31
  • 2013-06-13
  • 2012-11-07
  • 2019-09-20
相关资源
最近更新 更多