Могу ли я быть уверен, что локальная база данных пользователя не очищается между обновлениями ClickOnce?

У меня есть приложение 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 такие же. Это какое-то совпадение? Или я могу быть уверен, что пользователи не потеряют данные между обновлениями приложений?


person user2023861    schedule 20.06.2013    source источник


Ответы (1)


Поскольку я вижу C:\Users\username\AppData\Local\..., я предполагаю, что файл .sdf помечен как файл данных.

Из Как ClickOnce выполняет обновления приложений и Доступ к локальным и удаленным данным в приложениях ClickOnce (версии Data Directory и Application) в MSDN:

Каждая версия приложения имеет собственный каталог данных, который изолирован от других версий. (...) При установке новой версии приложения ClickOnce скопирует все существующие файлы данных из каталога данных предыдущей версии в каталог данных новой версии - независимо от того, были ли они включены в исходную. развертывание или созданный приложением.

ClickOnce заменит старую версию файла более новой версией сервера, если файл данных имеет другое хеш-значение в старой версии приложения, как и в новой версии.

Это означает, что если .sdf не изменится, вы не потеряете данные, файл будет скопирован (только путь к файлу изменится после изменения каталога данных).

Кроме того, если более ранняя версия приложения создала новый файл с тем же именем, что и файл, включенный в развертывание новой версии, ClickOnce перезапишет файл старой версии новым файлом. В обоих случаях старые файлы будут включены в подкаталог внутри каталога данных с именем .pre, чтобы приложение по-прежнему могло получить доступ к старым данным для целей миграции.

Не тестировалось, но это означает, что вы все еще можете получить доступ к предыдущим пользовательским данным, если исходный файл .sdf имеет изменения и воссоздается на клиенте.

person Chris    schedule 20.06.2013