Я разрабатываю простую игру для 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. Разве я ничего не делал? Ребятам, мне очень нужна ваша помощь:/
Ваши данные будут сохранены во время процедуры обновления - MSDN:
При обновлении вашего приложения любые данные в изолированном хранилище сохраняются. Однако данные в изолированном хранилище удаляются, если пользователь удаляет и затем перенастраивает ваше приложение. Дополнительные сведения см. В разделе "Данные для Windows Phone 8".
Это ваша ответственность за правильное обращение со всеми старыми файлами.
Я бы посоветовал вам опубликовать (после успешного тестирования при развертывании через VS) бета-версию (например, ограниченную только вам) и процедуры обновления теста. Из моего опыта это очень важно - может быть много подводных камней, и нет ничего хуже, чем приложение, которое выходит из строя после обновления, поэтому проверьте как можно больше раз.
Как сказал Ромас, вы должны сами обрабатывать все старые файлы в IsolStorage. Я просто хотел добавить несколько советов/подсказок о том, как это сделать:
Я надеюсь, что это помогает кому-то. :)
Обновление//Благодаря 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, будут выполняться обе процедуры обновления, причем старший из них будет первым, как и должно быть.
Это действительно зависит от того, где и как вы храните XML файл. Но поскольку вы изменяете файл во время выполнения, я предполагаю, что вы храните его в изолированном хранилище. В этом случае файл не будет перезаписан при обновлении приложения.
Если вы хотите быть на 100% уверенным, - развертывайте отладочную версию приложения с помощью инструмента развертывания приложений на своем тестовом мобильном устройстве/эмуляторе - используйте приложение некоторое время, чтобы обновить xml файл - перекомпилируйте (не перестраивайте) и перераспределить. Если изменения останутся неповрежденными после повторного развертывания, вы добры!