我有一个简单的WPF应用程序,它使用ClickOnce来处理安装。在此应用程序中是一个紧凑的数据库通过测试,我发现当我发布一个新版本时,这个数据库将被覆盖,这不是我想要的。无论如何,我可以对哪些文件更新进行细粒度控制?我假设ClickOnce只是检查数据库文件的哈希,确定它已经改变并提取更新。
作为一种解决方法,我已经从已发布的应用程序中包含的文件中删除了数据库,因此原始文件在更新后保留在客户端计算机上,不受影响。
我知道不是一个很好的解决方案
谢谢,
答案 0 :(得分:5)
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" />
“| DataDirectory |”是SQL CE和SQL Express支持的特殊语法,并在运行时解析到正确的目录。
答案 1 :(得分:2)
如果打开项目中包含的SQLCE数据库,它将更改数据库上的时间戳,ClickOnce将部署它并将旧版本放在\ pre子文件夹下。
您可能需要考虑this method来处理此问题。然后,如果您不小心部署了新版本的数据库并且没有意识到它,那么您就不会受到冲击。如果您有意进行更改,可以使用SQL查询更改当前数据库的数据库结构,并在需要时从部署到数据目录的新副本中提取数据(您可以忽略它)。
RobinDotNet