如何在.net中解决“无法加载文件或程序集'System.Data.SQLite.dll'”的问题?

时间:2014-12-15 01:17:58

标签: .net database vb.net sqlite

我正在使用VB.NET。我有这个程序开发,我成功运行它与SQLite作为其数据库。问题是,当我尝试在新安装的Windows 7的虚拟机中运行程序时,它给了我一个错误:

  

无法加载文件或程序集“System.Data.SQLite.dll”或其依赖项之一。

当然,然后,我包含了汇编文件System.Data.SQLite.dll,但它仍然给了我同样的错误。我认为这可以解决问题,我将该汇编文件放在Windows 7中的同一目录中。它仍然无法正常工作。

我发布了我的项目并尝试在虚拟机中部署它,但是它给我一个错误,即应该在GAC(全局程序集缓存)中安装System.Data.SQLite.dll。这一次,我使用了InstallShield LE(我不知道如何使用它,我只是将调试文件夹中的所有文件都包含在内)并将其安装在VM中,但仍然是"无法加载程序集& #34;出现错误。

我该怎么办?我缺少什么?

2 个答案:

答案 0 :(得分:1)

在部署SQLite时,您需要底层的互操作库。 (命名为" Interop.Sqlite.dll")

在我的部署中,我使用了本页SQLite XCOPY Interop

中提到的XCOPY方法

基本上,方法是在项目中创建2个文件夹,一个名为" x86"一个" x64"。将每个文件夹放在32位或64位版本的" Interop.SQLite.dll"并将文件属性设置为"内容"和"复制如果更新"所以文件包含在程序的输出目录中。 (主程序集将使用基于目标平台的正确程序)这假定您的程序设置为"任何CPU"部署。

否则你只需要包含正确的" Interop.SQLite.dll"文件。

这应该是输出目录的基本结构(来自链接)

  • bin \ App.exe(您的程序,仅限托管应用程序可执行程序集)
  • bin \ System.Data.SQLite.dll (必需的,仅限托管核心程序集)
  • bin \ x86 \ SQLite.Interop.dll (必需,x86原生互操作程序集)
  • bin \ x64 \ SQLite.Interop.dll (必需,x64原生互操作程序集)

答案 1 :(得分:0)

创建安装程序时,您是否已将SQLite安装到GAC?如果没有,那就没有帮助。

基本上,您有两种选择:

  1. 让您的应用在GAC中查找SQLite库,在这种情况下,SQLite必须由用户手动安装或由安装人员自动安装。
  2. 让你的应用程序在程序文件夹中查找SQLite库,在这种情况下,你应该将SQLite引用的Copy Local属性设置为True,然后手动或通过EXE从输出文件夹中复制SQLite DLL安装人员。