【问题标题】:How to Publish a Winforms App with SQLite using ClickOnce如何使用 ClickOnce 发布带有 SQLite 的 Winforms 应用程序
【发布时间】:2016-08-30 13:15:46
【问题描述】:

我有一个使用 Visual Studio Community 2015 在 64 位计算机上的 Windows 8.1 上开发的小型 C# WinForms 应用程序,目标是 .Net Framework 4.5.2 和任何 CPU |首选 32 位。 (我也尝试只针对 x86)。

我使用 NuGet 包管理器安装了 Entity Framework 6.3.1 和 System.Data.SQLite 1.0.101(安装了 System.Data.SQLite、System.Data.SQLite.Core、System.Data.SQLite.EF6 和System.Data.SQLite.Linq),尽管 System.Data.SQLite.Core 没有显示在项目引用中。

应用在 VS 调试器中运行良好,但 ClickOnce 发布的版本在同一台计算机上安装和运行时触发无法加载 SQLite.Interop.dll 异常。

我在解决方案资源管理器中没有看到对 SQLite.Interop.dll 的任何引用。项目的 x86 和 x64 Debug 文件夹中都有这样的 dll,但在为空的 Release 文件夹中没有。当我尝试添加对 x86 或 x64 dll 的引用时,我收到一条错误消息,指出无法添加它们(即无法访问或不是有效的程序集或 COM 组件)。项目引用中的所有 3 个 SQLite dll 都具有 Copy Local = true。

我猜 SQLite NuGet 安装未能设置某些项目属性/引用,但我不知道这可能是什么,为什么以及如何解决它。我什至不确定是谁负责:SQLite、NuGet、Visual Studio 还是我?

感谢您的帮助。史蒂夫

【问题讨论】:

  • 我遇到了完全相同的问题。我将继续进一步补充说,我尝试使用 clickonce 解决方案安装 c++ 可再分发包,但无济于事。多年前对于同样的问题有许多解决方案,但没有什么能真正为我解决问题

标签: sqlite visual-studio-2015 clickonce


【解决方案1】:

我刚刚找到了一个可行的解决方案。阅读https://github.com/oysteinkrog/SQLite.Net-PCL/issues/158#issuecomment-88163499 概述的评论

重要的部分:

我为 x86 和 x64 创建了新的 PROJECT 文件夹。我在单击一次部署的项目中创建了项目文件夹。也就是说,生成可执行文件的项目。我将 bin 文件夹中的互操作文件复制到了新的解决方案文件夹中

【讨论】:

  • 感谢您的回复。我曾尝试通过将 SQLite.Interop.dll 添加到引用中来将其添加到部署中,但尝试时出错(我认为是因为它不是托管代码)。
  • 为了更清楚:创建文件夹后添加 dll,使用“添加 -> 现有项目”并选择 dll 文件。
【解决方案2】:

只需在您的 solition explorer 中包含 x86 和 x64 文件夹即可。然后将 Copy 设置为 local=true。我将使用 sqlite.interop.dll 创建文件夹

【讨论】:

  • 如何在文件夹中设置“复制到本地”?
【解决方案3】:

有一个类似的问题,通过在我的启动项目中简单地创建 x64 和 x86 文件夹来解决它,如下所示:

  • 我正在使用单独的类库项目与 sqlite db 进行通信。这是我复制 sqlite.interop.dll 文件的地方

【讨论】:

    猜你喜欢
    • 2022-06-28
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-05
    • 1970-01-01
    相关资源
    最近更新 更多