【问题标题】:How does the ClickOnce installer handle updates when a compact database is involved?当涉及紧凑型数据库时,ClickOnce 安装程序如何处理更新?
【发布时间】:2010-02-14 15:26:17
【问题描述】:

我有一个简单的 WPF 应用程序,它使用 ClickOnce 来处理安装。在这个应用程序中是一个紧凑的数据库。通过测试我发现当我发布一个新版本时,这个数据库会被覆盖,这不是我想要的。无论如何,我可以对更新的文件进行细粒度控制吗?我假设 ClickOnce 只是检查数据库文件的哈希,确定它已更改并拉取更新。

作为一种解决方法,我已经从已发布应用程序包含的文件中删除了数据库,以便在更新后原始保留在客户端计算机上,不受影响。

我知道这不是一个很好的解决方案

谢谢,

【问题讨论】:

  • 导致哈希发生变化的数据库发生了什么变化?您认为将来会想要推出新版本的数据库吗?
  • 据我所知,除了创建/修改时间戳之外,真的不应该有任何变化。我可能想在某个时候更新数据库,但我想现在我发布的版本中的数据库与原始版本的哈希值不同,所以 clickonce 每次都想覆盖,这意味着用户丢失数据.

标签: wpf clickonce


【解决方案1】:

ClickOnce 部署将应用程序文件隔离为“包含”或“数据文件”。您可以通过转到项目属性页面,发布选项卡,然后单击“应用程序文件...”按钮来指定每个文件在 Visual Studio 中的内容。然后,您可以将 .sdf 文件设置为“发布状态”列下的“数据文件”。

使用 ClickOnce 应用程序下载的数据文件随后被放置在每个新版本的单独目录中。

这个想法是,在新应用程序版本首次运行时,您会从旧版本数据文件中检索用户的所有私人数据,并将这些数据合并到刚刚随新版本下载的新数据文件中.

我想你会在Accessing Local and Remote Data in ClickOnce Applications 找到你需要的信息。具体来说,请查看“ClickOnce 数据目录”和“数据目录和应用程序版本”部分。

要访问位于 Data 目录中的 SQL Server CE 数据库,请使用类似于以下内容的连接字符串:

<add
  name="MyApplication.Properties.Settings.LocalCacheConnectionString"
  connectionString="Data Source=|DataDirectory|\LocalCache.sdf"
  providerName="Microsoft.SqlServerCe.Client.3.5" />

“|数据目录|”是 SQL CE 和 SQL Express 支持的特殊语法,并在运行时解析到正确的目录。

【讨论】:

  • 为什么我以前版本的 MDF 文件似乎有新版本的“修改日期”?你认为以前版本的数据目录有可能被新的数据文件覆盖吗?
【解决方案2】:

如果您打开项目中包含的 SQLCE 数据库,它将更改数据库上的时间戳,ClickOnce 将部署它并将旧版本放在 \pre 子文件夹下。

您可能需要考虑this method 来处理此问题。然后,如果您不小心部署了一个新版本的数据库并且没有意识到这一点,那么您就不会被淹没。如果您有意进行更改,您可以使用 SQL 查询更改当前数据库的数据库结构,并在需要时从部署到数据目录的新副本中提取数据(否则您会忽略)。

RobinDotNet

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    • 2010-10-02
    • 2011-06-30
    • 2023-03-03
    • 1970-01-01
    相关资源
    最近更新 更多