Как установщик ClickOnce обрабатывает обновления, когда используется компактная база данных? - PullRequest
5 голосов
/ 14 февраля 2010

У меня есть простое приложение WPF, которое использует ClickOnce для установки. В этом приложении есть компактная база данных. В ходе тестирования я обнаружил, что при публикации новой сборки эта база данных будет перезаписана, а это не то, чего я хочу. Могу ли я в любом случае иметь точный контроль над тем, какие файлы обновляются? Я предполагаю, что ClickOnce просто проверяет хэш файла базы данных, решает, что он изменился, и извлекает обновление.

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

Не очень хорошее решение, я знаю

Спасибо

Ответы [ 2 ]

5 голосов
/ 27 февраля 2010

Развертывания ClickOnce разделяют файлы приложения на «Включить» или «Файл данных». Вы можете указать, что представляет собой каждый файл в Visual Studio. Для этого перейдите на страницу свойств проекта, перейдите на вкладку "Публикация" и нажмите кнопку "Файлы приложения ...". Затем в столбце «Состояние публикации» можно установить для файла .sdf значение «Файл данных».

Файлы данных, загружаемые с помощью приложения ClickOnce, затем помещаются в отдельный каталог для каждой новой версии.

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

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

Чтобы получить доступ к базе данных 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, и разрешается во время выполнения в соответствующий каталог.

2 голосов
/ 09 марта 2010

Если вы до открываете эту базу данных SQLCE, включенную в ваш проект, она изменит отметку времени в базе данных, и ClickOnce развернет ее и поместит старую версию в подпапку \ pre.

Вы можете рассмотреть этот метод для обработки этого. Тогда, если вы случайно развернете новую версию базы данных и не поймете это, вы не будете обмануты. Если вы намеренно вносите изменения, вы можете изменить структуру базы данных вашей текущей базы данных с помощью запросов SQL и извлекать данные из новой копии, развернутой в Каталог данных (которую вы игнорируете в противном случае), когда вам это необходимо.

RobinDotNet

...