如何使用ClickOnce发布带有SQLite的Winforms应用程序

6
我有一个使用Visual Studio Community 2015在Windows 8.1上开发的小型C# WinForms应用程序,针对.NET Framework 4.5.2和Any CPU | Prefer 32-bit。我还尝试了只针对x86。
我使用NuGet Package Manager安装了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),但是Solution Explorer中没有看到System.Data.SQLite.Core的项目引用。
应用程序在VS debugger中运行良好,但ClickOnce发布版本在同一台计算机上安装并运行时会触发无法加载SQLite.Interop.dll异常。在项目的x86和x64 Debug文件夹中都有这样的dll,但在空的Release文件夹中没有。当我尝试添加对x86或x64 dlls的引用时,会收到错误消息(即不可访问或不是有效的程序集或COM组件)。项目引用中的所有3个SQLite dll均具有“复制本地”= true属性。
我猜测SQLite NuGet安装未能设置某些项目属性/引用,但我不知道可能是什么原因,也不知道如何解决。我甚至不确定谁应该负责:SQLite,NuGet,Visual Studio还是我?
感谢您的帮助。Steve

我遇到了完全相同的问题。我还要进一步补充说,我尝试过在我的 ClickOnce 解决方案中安装 C++ 可再发行包,但无济于事。有许多年前针对此问题的解决方案,但没有一个能真正解决我的问题。 - MrNickel
3个回答

10

我刚找到了一个可行的解决方案。请阅读这里标记的注释。

重要部分:

我为 x86 和 x64 创建了新的项目文件夹。我将这些项目文件夹创建在 click-once 部署的项目中,也就是生成可执行文件的项目中。我从 bin 文件夹中将 interop 文件复制到新的解决方案文件夹中。


谢谢回复。我尝试通过将SQLite.Interop.dll添加到引用中来部署它,但在尝试时出现错误(我认为是因为它不是托管代码)。 - Steve Rehling
2
为了更清晰明了:在创建文件夹后添加dll,使用“添加->现有项目”并选择dll文件。 - muccix

1
只需在解决方案资源管理器中包含x86和x64文件夹。然后设置Copy to local=true。我将创建带有sqlite.interop.dll的文件夹。

你如何在文件夹中设置“复制到本地”? - Zolbayar

0

我曾经遇到过类似的问题,通过在启动项目中创建x64和x86文件夹来解决:

Including sqlite.interop.dll in wpf clickonce app

  • 我正在使用一个单独的类库项目来与sqlite数据库通信。这是我从中复制sqlite.interop.dll文件的地方。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接