【问题标题】:How to resolve "Could not load file or assembly ‘System.Data.SQLite.dll’" in .net?如何在 .net 中解决“无法加载文件或程序集‘System.Data.SQLite.dll’”?
【发布时间】:2014-12-15 01:17:58
【问题描述】:

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

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

当然,然后,我包含了程序集文件 System.Data.SQLite.dll,但它仍然给我同样的错误。我认为这可以解决问题,我将那个程序集文件放在 Windows 7 内的同一目录中。它仍然不起作用。

我发布了我的项目并尝试将其部署在虚拟机中,但它给了我一个错误,即 System.Data.SQLite.dll 应该安装在 GAC(全局程序集缓存)中。这次我用了InstallShield LE(我不太会用,只是把Debug文件夹里面的所有文件都包含进去了)安装在VM里面,但是还是出现了“Could not load assembly”的错误。

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

【问题讨论】:

    标签: .net database vb.net sqlite


    【解决方案1】:

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

    在我的部署中,我使用本页 SQLite XCOPY Interop 中提到的 XCOPY 方法

    基本上该方法是在您的项目中创建 2 个文件夹,一个名为“x86”,一个名为“x64”。在每个文件夹中放置 32 位或 64 位版本的“Interop.SQLite.dll”,并将文件属性设置为“Content”和“Copy If Newer”,以便文件包含在程序的输出目录中。 (主程序集将根据目标平台使用正确的程序集)这假设您的程序设置为“任何 CPU”部署。

    否则您只需要包含正确的“Interop.SQLite.dll”文件。

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

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

    【讨论】:

      【解决方案2】:

      当您创建安装程序时,您是否已将 SQLite 安装到 GAC?如果没有,那将无济于事。

      基本上,您有两种选择:

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

      【讨论】:

      • 当然,我总是复制那个...就像我说的,我已经包含了 DLL...
      猜你喜欢
      • 1970-01-01
      • 2021-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-29
      相关资源
      最近更新 更多