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

时间:2016-05-04 22:09:53

标签: sqlite visual-studio-2015 clickonce

我在64位计算机上使用Windows 8.1上的Visual Studio Community 2015开发了一个小型C#WinForms应用程序,目标是.Net Framework 4.5.2和任何CPU喜欢32位。 (我也试过只针对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),虽然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,我?

感谢您的帮助。史蒂夫

3 个答案:

答案 0 :(得分:7)

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

的评论

重要部分:

  

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

答案 1 :(得分:0)

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

创建文件夹

答案 2 :(得分:0)

遇到类似的问题,可以通过在启动项目上模拟创建x64和x86文件夹来解决此问题,如下所示:

Including sqlite.interop.dll in wpf clickonce app

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