当我更新应用程序时,文件会发生什么?

本文关键字:什么 文件 更新 应用程序 | 更新日期: 2023-09-27 18:04:26

我正在开发一款简单的Windows Phone 8游戏,突然一个问题出现在我的脑海中?当我更新应用程序时,文件(例如:Score.xml)会发生什么?更新覆盖所有文件或保留它们或什么?

假设您有一个保存分数的xml (Score.xml)文件。这是原始文件:

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

用户继续玩游戏,因为你猜这些分数属性增加。几个月后,我想你会用新的xml文件(Score.xml)更新你的游戏:

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

在这种情况下会发生什么?现在我们有了保存用户当前分数信息的旧的score .xml,并且在更新中我们有了新的score .xml,从头开始使用新的属性?我做了我的应用程序与数据库之前,但在这个游戏我不需要它。我需要简单的xml文件。现在很困惑,不知道如何搜索,甚至在holly谷歌这种情况。我是不是误会了什么?朋友们,我真的需要你们的帮助:/

当我更新应用程序时,文件会发生什么?

您的数据将在更新过程中被保留- MSDN:

当你更新你的应用程序时,隔离存储中的任何数据都会被保留。但是,如果用户卸载然后重新安装您的应用程序,则会删除隔离存储中的数据。有关详细信息,请参阅Windows Phone 8的数据。

正确处理所有旧文件是你的责任。

我建议你发布(在通过VS成功测试部署后)一个测试版(例如仅限你使用)并测试更新过程。从我的经验来看,这是一件非常重要的事情——可能会有很多陷阱,没有什么比应用程序在更新后失败更糟糕的了——所以尽可能多地检查。

正如Romasz所说,您必须自己处理IsolatedStorage中的所有旧文件。我只是想就如何做到这一点提供一些建议/提示:

  1. 知道何时版本发生了变化。
    • 将应用程序之前的运行版本保存在文件中。当你运行应用程序时,检查新版本是否高于文件中的版本,如果是,更新你需要的,然后更新存储在文件中的版本。
    • 在某些情况下,知道文件最后被哪个版本修改是很好的。你可以在该文件中存储应用程序版本,并在文件反序列化时添加一些逻辑,其中的版本是旧的。
  2. 在某些情况下,您可能需要进行更改,使新类与旧文件不兼容。当然,您仍然需要旧文件中的数据,因此有两种方法(目前我能想到的)可以处理此问题:
    • 在更新时,以XmlDocument/XDocument的形式打开文件,并对其进行相应修改,使其与新类兼容。
    • 如果有很多变化,用你想要序列化的新数据创建一个全新的类,保持旧的不变。然后,在更新时,将旧文件转换为新文件。(您将把旧文件反序列化为旧类,然后用新类保存新文件)
  3. 三次检查更新中的所有内容。部署旧版本,使用它一段时间,然后部署新版本,看看是否正确处理了更新。(好吧,这不是关于处理,但它非常非常重要。)

我希望这能帮助到别人。:)

Update//Thanks to Romasz

您应该保留以前版本的更新代码。例如,有人可能会从1.3版本更新到1.6版本,而不经过1.4和1.5版本。在这种情况下,您可以在更新时做几件事。

update的代码基本上是这样的:

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文件的位置和方式。但是因为您是在运行时修改文件,所以我假设您将其存储在独立的存储中。在这种情况下,当你更新应用程序时,文件将不会被覆盖。

如果你想百分百确定,-使用应用程序部署工具将应用程序的调试版本部署到您的测试手机/模拟器-使用应用程序一段时间,使XML文件得到更新-重新编译(而不是Rebuild)并重新部署。如果在重新部署后更改保持不变,那就很好了!