我正在开发一款简单的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文件。现在非常困惑,不知道如何在冬青谷歌搜索甚至这种情况。我误解了什么吗?伙计我真的需要你的帮助:/
答案 0 :(得分:4)
您的数据将在更新过程中保留 - MSDN:
更新应用时,将保留隔离存储中的所有数据。但是,如果用户卸载并重新安装您的应用程序,则会删除隔离存储中的数据。有关详细信息,请参阅Windows Phone 8的数据。
您有责任正确处理所有旧文件。
我建议您发布(通过VS部署成功测试后)测试版(例如仅限于您)和测试更新程序。从我的经验来看,这是非常重要的事情 - 可能存在许多陷阱,并且没有什么比更新后失败的应用程序更糟糕 - 所以请尽可能多地检查。
答案 1 :(得分:2)
正如Romasz所说,你必须自己处理IsolatedStorage中的所有旧文件。我只是想补充一些关于如何做的建议/提示:
我希望这有助于某人。 :)
更新 //感谢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 )并重新部署。 如果重新部署后更改仍然完好无损,那么您很好!