【问题标题】:how properly deploy WPF app with sqlite database using ClickOnce如何使用 ClickOnce 正确部署带有 sqlite 数据库的 WPF 应用程序
【发布时间】:2015-06-25 22:26:23
【问题描述】:

我尝试使用 ClickOnce,但未包含数据库。

当我将数据库属性“构建操作”更改为内容时,它在发布文件属性中可见。

https://msdn.microsoft.com/en-us/library/kzy0fky2.aspx

不幸的是,在这种情况下,我收到以下错误:

错误 2 生成清单时出现问题。该进程无法访问文件“H:\Repos\InstalmentsManagement\Installments.Wpf\Database\installments.sqlite”,因为它正被另一个进程使用。分期付款.Wpf

我的连接字符串是:

  <connectionStrings>
    <add name="installmentsEntities" connectionString="metadata=res://*/InstallmentsModel.csdl|res://*/InstallmentsModel.ssdl|res://*/InstallmentsModel.msl;provider=System.Data.SQLite.EF6;provider connection string=&quot;data source=|DataDirectory|\Database\installments.sqlite&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>

此外,我在启动时做了以下操作以检测数据目录:

    protected override void OnStartup(StartupEventArgs e)
    {
        string executable = System.Reflection.Assembly.GetExecutingAssembly().Location;
        string path = (System.IO.Path.GetDirectoryName(executable));
        AppDomain.CurrentDomain.SetData("DataDirectory", path);

        base.OnStartup(e);      
    }

【问题讨论】:

    标签: wpf sqlite clickonce publish


    【解决方案1】:

    如果您收到“进程无法访问”本地数据文件,则可能是您自己打开它而不是关闭它。

    ClickOnce 将|DataDirectory| 定义为安装程序数据文件夹。如果您的连接字符串是|DataDirectory|\Database\installments.sqlite,那么您需要将项目的Database 文件夹而不是installments.sqlite 文件标记为数据文件。或者您可以将连接字符串更改为|DataDirectory|\installments.sqlite

    SetData 不会“检测” DataDirectory,它会替换它。不要调用SetData,因为这将替换 ClickOnce 的值。如果您需要知道安装程序目标数据文件夹,您可以致电AppDomain.CurrentDomain.GetData("DataDirectory"),但如果您使用的是 ADO.NET,您甚至不需要这样做; ADO.NET 会将连接字符串中的|DataDirectory| 替换为安装程序数据文件夹的路径。

    您可能只需要删除您的OnStartup 方法;这就是破坏事物的原因。

    【讨论】:

    • 我正在使用实体框架。我从 OnStartup 函数中删除了代码。我删除了数据库文件夹,将 installments.sqlite 移到了它之外,更改了连接字符串,但发布仍然没有复制该文件
    • 我怀疑某些东西,很可能是您自己的代码,正在打开 installments.sqlite 而不是关闭它。找到那个东西可能需要物理访问您的开发机器。 Process Explorer 可以帮助你。
    • 抱歉,当我另外将构建操作更改为内容时,它与您的建议一起成功 - 谢谢
    猜你喜欢
    • 2020-01-28
    • 1970-01-01
    • 2022-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    相关资源
    最近更新 更多