Что происходит с файлами при обновлении приложения?

1

Я разрабатываю простую игру для Windows Phone 8, и вдруг у меня возник вопрос? Что происходит с файлами (например: Score.xml) при обновлении приложения. Обновление перезаписывает все файлы или сохраняет их или что?

Скажем, у вас есть xml (Score.xml) файл, который хранит оценки. Это оригинальный файл:

<Score>
    <LevelOne Score="0"/>
    <LevelTwo Score="0"/>
</Score>

Пользователь продолжает играть в игру, так как вы предполагаете, что эти атрибуты Score увеличиваются. Через несколько месяцев, подумайте, что вы поменяете свою игру новым XML файлом (Score.xml):

<Score>
    <LevelOne Score="0" HowManyTimesPlayed="0"/>
    <LevelTwo Score="0" HowManyTimesPlayed="0"/>
</Score>

Что происходит в этой ситуации? Теперь у нас есть старый Score.xml, который хранит текущую информацию о текущих показателях, и у нас есть новый Score.xml в обновлении, который начинается с нуля с новыми атрибутами? Раньше я делал свои приложения с базой данных, но в этой игре мне это не нужно. Мне нужны простые xml файлы. Очень запутался прямо сейчас и не знаю, как искать даже эту ситуацию в holly google. Разве я ничего не делал? Ребятам, мне очень нужна ваша помощь:/

Теги:
windows-phone-8

3 ответа

4
Лучший ответ

Ваши данные будут сохранены во время процедуры обновления - MSDN:

При обновлении вашего приложения любые данные в изолированном хранилище сохраняются. Однако данные в изолированном хранилище удаляются, если пользователь удаляет и затем перенастраивает ваше приложение. Дополнительные сведения см. В разделе "Данные для Windows Phone 8".

Это ваша ответственность за правильное обращение со всеми старыми файлами.

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

  • 0
    Хранение данных в изолированном хранилище означает, что я должен создать файл в коде и проверить, создан ли он уже? Я хочу создать файл в решении, потому что его легко изменить во время разработки, но я думаю, что это плохой подход: /
  • 1
    @Murat Если вы хотите хранить контент некоторых пользователей (баллы, количество прогонов), вам понадобится контейнер для этого. Это может быть файл или самый простой - IsolatedStorageSettings - если у вас небольшой объем данных - используйте это. Он автоматически сериализует данные, работает как словарь и сохраняется во время обновления (это файл в IsolatedStorage).
Показать ещё 5 комментариев
2

Как сказал Ромас, вы должны сами обрабатывать все старые файлы в IsolStorage. Я просто хотел добавить несколько советов/подсказок о том, как это сделать:

  1. Знайте, когда версия изменилась.
    • Сохраните приложение предыдущей версии приложения в файле. Когда вы запустите приложение, проверьте, не отличается ли новая версия от файла, и если да - обновите то, что вам нужно, а затем обновите версию, хранящуюся в файле.
    • В некоторых случаях полезно знать, какая версия приложения была последним измененным файлом. Вы можете сохранить версию приложения в этом файле и добавить некоторую логику, когда файл десериализован, а версия в нем устарела.
  2. В некоторых случаях вам может потребоваться внести изменения, которые сделают новый класс несовместимым со старым файлом. Конечно, вам все равно понадобятся данные из старого файла, так что вот два способа (я могу думать на данный момент), что вы можете справиться с этим:
    • В процессе обновления откройте файл как XmlDocument/XDocument и соответствующим образом измените его, чтобы сделать его совместимым с новым классом.
    • Если есть много изменений, создайте совершенно новый класс с новыми данными, которые вы хотите сериализовать, и оставьте старое нетронутым. Затем при обновлении преобразуйте старые файлы в новые файлы. (Вы будете десериализовать старый файл как старый класс, а затем сохранить новый файл с новым классом.)
  3. Тройка проверяет все в обновлении. Разверните старую версию, используйте ее немного, а затем разверните новую версию, чтобы убедиться, что обновление выполнено правильно. (Хорошо, что не об обработке, но это очень важно.)

Я надеюсь, что это помогает кому-то. :)

Обновление//Благодаря Romasz

Вы должны сохранить код обновления для предыдущих версий. Кто-то может, например, обновить с версии 1.3 до версии 1.6, не перейдя к версиям 1.4 и 1.5. В этом случае у вас может быть несколько вещей, которые нужно сделать при обновлении.

В основном код для обновления заканчивается чем-то вроде:

if (oldVersion < new Version(1, 4)) {
    //update what changed from version 1.3 to version 1.4
}
//no need to update anything from version 1.4 to 1.5
if (oldVersion < new Version(1, 6)) {
    //update what changed from version 1.5 to version 1.6
}

Таким образом, когда кто-то обновляется с 1.3 до 1.6, будут выполняться обе процедуры обновления, причем старший из них будет первым, как и должно быть.

  • 0
    +1 За сохранение старого номера версии в файле. Это может быть полезно во многих случаях. Также полезно помнить, что после некоторых обновлений лишь немногие пользователи могут обновлять некоторые прошлые версии (не только последнюю), если они отключили автоматические обновления. Разработчик также должен разобраться с этим делом. Что касается пункта 2. - ИМО разработчик должен обрабатывать старые файлы - и нет никакой возможности, чтобы он не смог десериализовать их :)
  • 0
    @Romasz Ну, они смогут десериализовать их, как только обработают обновление. Проблема в том, что если вы тестируете новую версию только с измененным классом, вы можете не заметить, что старая не может быть десериализована. В некоторых редких случаях вам нужно так сильно изменить класс, что старый файл не может быть десериализован, и я попытался объяснить, что делать в этой ситуации. :)
Показать ещё 2 комментария
1

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

Если вы хотите быть на 100% уверенным, - развертывайте отладочную версию приложения с помощью инструмента развертывания приложений на своем тестовом мобильном устройстве/эмуляторе - используйте приложение некоторое время, чтобы обновить xml файл - перекомпилируйте (не перестраивайте) и перераспределить. Если изменения останутся неповрежденными после повторного развертывания, вы добры!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню