我有一个ClickOnce应用程序,其中包含* .sdf文件,我将其用作数据库。每个用户都有一个本地数据库。我想确保当我将新更新部署到我的应用程序时,用户不会丢失其本地数据库中的任何数据。
我运行了一个简单的测试,似乎是在应用程序更新之间保存数据库记录的情况。但是,我检查了数据库连接字符串,并且应用程序使用的* .sdf文件在更新之间不同。看起来* .sdf文件位于临时文件夹中:
Version 1: C:\Users\username\AppData\Local\Apps\2.0\Data\BTC7847T.TGN\
RX0XEL7T.28C\db_v..tion_5b84da8ac499fbd9_0001.0000_218dbb369a32672c\Data\db.sdf
Version 2: C:\Users\username\AppData\Local\Apps\2.0\Data\BTC7847T.TGN\
RX0XEL7T.28C\db_v..tion_5b84da8ac499fbd9_0001.0000_228bdaad95bad96c\Data\db.sdf
这些文件夹路径不相同,但* .sdf文件中的数据相同。这有些巧合吗?或者我可以放心,用户不会在应用程序更新之间丢失数据吗?
答案 0 :(得分:1)
由于我看到C:\Users\username\AppData\Local\...
,我猜.sdf文件被标记为数据文件。
来自MSDN上的How ClickOnce Performs Application Updates和Accessing Local and Remote Data in ClickOnce Applications(数据目录和应用程序版本):
每个版本的应用程序都有自己的数据目录,即 与其他版本隔离。 (...)安装新版本的应用程序时, ClickOnce 将复制先前版本的数据中的所有现有数据文件 目录进入新版本的数据目录 - 无论他们是谁 包含在原始部署中或由应用程序创建。
ClickOnce将使用较新版本替换旧版本的文件 服务器的版本,如果数据文件中的哈希值不同 旧版本的应用程序,如新版本。
这意味着如果.sdf没有改变,你就不会丢失数据,文件将被复制(只是文件的路径会因数据目录的变化而改变)。
此外,如果应用程序的早期版本创建了一个具有该文件的新文件 与新版本部署中包含的文件同名, ClickOnce将使用新文件覆盖旧版本的文件。的在 两种情况下,旧文件都会包含在子目录里面 名为.pre的数据目录,以便应用程序仍然可以 访问旧数据以进行迁移。
未经测试,但这意味着如果.sdf源有更改并在客户端上重新创建,您仍然可以访问以前的用户数据。