【问题标题】:"Unable to load DLL 'SQLite.Interop.dll' error on client machine“无法在客户端机器上加载 DLL 'SQLite.Interop.dll' 错误
【发布时间】:2015-08-03 01:57:50
【问题描述】:

我已经创建了一个 Winforms 应用程序,并且正在使用带有实体框架 6 的 SQLite。我正在使用 Visual Studio 2013。

该应用程序在我的本地机器上运行良好。但是,当程序在另一台机器上运行时,会出现以下错误:

“无法加载 DLL 'SQLite.Interop.dll':找不到指定的模块。

就我而言,问题是当我发布我的项目时,Interop dll 没有被复制到目录中。

我的问题是:当我发布应用程序时,如何强制将此 dll 复制到正确的目录?

【问题讨论】:

    标签: c# sqlite dll deployment publish


    【解决方案1】:

    我找到了解决问题的方法。我已经正确安装了所有 SQLite 包,但是当我发布应用程序时,Interop.dll 没有复制过来。

    我所做的是构建项目,然后进入 bin/Debug/ 文件夹并复制包含 SQLite.Interop.dll 文件的 x86 和 x64 文件夹。然后我将这些文件夹包含在我的项目中。现在一切正常。

    【讨论】:

    • 就是这样。现在的问题是我们如何自动制作副本,因为我无法添加对该文件的项目的引用,因为 VS 无法将此文件识别为程序集或 COM 组件。顺便说一句,非常感谢你:-)
    • 1.打开 Visual Studio,通过 NUGET 包管理器搜索并安装 SQLite.Core 2. 在解决方案资源管理器中,右键单击您的项目名称-->添加-->新文件夹 3. 将文件夹命名为 x64 4. 重复该过程并添加文件夹并将其命名为 x86 5. 右键单击​​ x64 文件夹-->添加-->现有项目然后浏览调试文件夹。您将找到 x64 文件夹。选择“SQLite.Interop.dll”文件,然后点击确定。 6. 对 x86 文件夹重复步骤 5。 7. 右键单击​​您刚刚添加的每个 DLL,然后选择 PROPERTIES。在“复制到输出目录”选项中,选择“始终复制”
    【解决方案2】:

    对于后代,如果您通过 NuGet 添加 SQLite 并且它没有复制,您可以将其添加到您的 csproj 文件中,它应该复制 x86 和 x64:

     <PropertyGroup> 
        <ContentSQLiteInteropFiles>true</ContentSQLiteInteropFiles>
        <CopySQLiteInteropFiles>false</CopySQLiteInteropFiles>
        <CleanSQLiteInteropFiles>false</CleanSQLiteInteropFiles>
        <CollectSQLiteInteropFiles>false</CollectSQLiteInteropFiles>
     </PropertyGroup>
    

    【讨论】:

    • 这对我有用,谢谢。你知道为什么需要这样做吗?
    • 我相信“ContentSQLiteInterpFiles”一定是在告诉 Visual Studio 将这些文件作为内容复制到输出目录(随后在您编译和运行应用程序时使它们可用)。
    【解决方案3】:

    在 Visual Studio 中,将 SQLite.Interop.dll 引用属性“Copy Local”设置为 true。

    【讨论】:

    • 根本没有对 SQLite.Interop.dll 的引用。我已经尝试手动添加它,但它不存在于该列表中。如何使其可用?
    • 转到工具 -> 库包管理器 -> 包管理器控制台,然后选择您要发布的项目并输入:Install-Package System.Data.SQLite
    猜你喜欢
    • 2018-10-17
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    相关资源
    最近更新 更多