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

时间:2014-05-21 08:09:15

标签: c# xml windows-phone-8

我正在开发一款简单的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文件。现在非常困惑,不知道如何在冬青谷歌搜索甚至这种情况。我误解了什么吗?伙计我真的需要你的帮助:/

3 个答案:

答案 0 :(得分:4)

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

  

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

您有责任正确处理所有旧文件。

我建议您发布(通过VS部署成功测试后)测试版(例如仅限于您)和测试更新程序。从我的经验来看,这是非常重要的事情 - 可能存在许多陷阱,并且没有什么比更新后失败的应用程序更糟糕 - 所以请尽可能多地检查。

答案 1 :(得分:2)

正如Romasz所说,你必须自己处理IsolatedStorage中的所有旧文件。我只是想补充一些关于如何做的建议/提示:

  1. 了解版本何时更改。
    • 将应用程序的上一个运行版本保留在文件中。运行应用程序时,请检查新版本是否高于文件中的版本,如果是,请更新所需内容,然后更新存储在文件中的版本。
    • 在某些情况下,最好知道应用的哪个版本是上次修改的文件。您可以将应用程序版本存储在该文件中,并在反序列化文件时添加一些逻辑,并且其中的版本是旧的。
  2. 在某些情况下,您可能需要进行更改,以使新类与旧文件不兼容。当然,你仍然需要来自旧文件的数据,所以这里有两种方法(我现在可以想到)你可以处理这个:
    • 在更新时,将文件作为XmlDocument / XDocument打开并相应地修改它以使其与新类兼容。
    • 如果有很多更改,请使用要序列化的新数据创建一个全新的类,并保持旧的不变。然后,在更新时,将旧文件转换为新文件。 (您将旧文件反序列化为旧类,然后使用新类保存新文件。)
  3. 三重检查更新中的所有内容。部署旧版本,稍微使用它,然后部署新版本以查看是否正确处理了更新。 (好吧,这不是关于处理,但它非常重要。)
  4. 我希望这有助于某人。 :)

    更新 //感谢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时,两个更新程序都将被执行,旧的更新程序应该是第一个,应该是。

答案 2 :(得分:1)

这实际上取决于您存储XML文件的位置和方式。但是因为你在运行时修改文件我假设你将它存储在隔离的存储中。在这种情况下,更新应用程序时不会覆盖该文件。

如果你想100%肯定,      - 使用应用程序部署工具将应用程序的调试版本部署到测试移动设备/模拟器      - 使用该应用程序一段时间,以便更新xml文件      - 重新编译( not Rebuild )并重新部署。 如果重新部署后更改仍然完好无损,那么您很好!