2012-09-07 50 views
7

在我的WinRT应用程序中,我将用户数据(不是会话数据)存储在本地文件中。该文件被保存并通过ApplicationData.Current.LocalFolder加载。更改WinRT应用程序的appmanifest会破坏应用程序数据

每次我对应用程序清单进行较小的更改时,这些保存的文件和应用程序设置都将在应用程序启动时失效并被删除。只有在开发环境中才这么做,或者在应用程序商店中发布软件包时会发生这种情况吗?

如何防止系统执行此操作?如果由于版本更改而丢失数据,用户将非常不高兴!

更新1:
感谢汉斯帕桑特,我已经了解到,也data files have a Version。设置数据文件版本已解决版本更改(仅限增量)的问题,但不解决其他清单更改的问题。

更新2:
在我还观察到的同时,该应用不仅更改属性清单有这种效果。如果我为新语言(本地化)添加新的资源文件,数据也将被删除。如果这种奇怪的行为也会出现在通过商店发布的已安装应用程序中,那将非常高兴。

+1

听起来像你正在改变应用程序版本。查看ApplicationData.SetVersionAsync()方法。 –

回答

0

这应该只发生在开发环境中。一旦你发布应用程序,清单是固定的,不会改变*。

*除了以下情况1)您更改并重新上传,以及2)清单很可能会被认证过程更改,这是可以预料的。

+0

我不明白:如果我对应用程序进行更改,那么我习惯于增加应用程序版本。而且由于MS将版本号集成到应用清单中,我认为他们希望我们在那里设置版本号。但如果我因为应用程序的某些扩展或修复而更改了版本号,然后将更新的应用程序上传到商店,我不想删除应用程序数据。或者我误解了你的答案? – HCL

+0

更改存储中已部署应用程序的版本号不应覆盖设备上已存在的数据。至少,这是我的理解。 – ZombieSheep

2

我的问题的答案似乎并不那么容易。最终我发现它可能包含两个不同的问题。在网上,我发现只有little Information,所以我在这里写的只是一些猜测,基于我已经完成的一些简单的测试。

版本的变化
感谢汉斯帕桑特,我已经了解到,数据文件可能有version。由于缺乏文件,我做的版本测试和版本设置如下:在我加载我的数据文件

await ApplicationData.Current.SetVersionAsync((uint)1, (setVersionRequest) => { }); 

的代码执行的任何时候。由于目前我的文件格式没有变化,因此我将更改回调保留为空{}
插入上述代码后,版本更改在更改版本属性时不再删除我的应用程序数据。但是,作为一个测试,我随后删除了代码,并且意外地发现,任何版本更改都不会再删除应用程序数据文件!也许是因为他们现在版本化了。 (作为一个方面:减少版本结果总是会丢失数据文件)。

一般舱单更改
的清单(除了版本的属性)的更改属性删除数据的影响尚未消失。如果我改变了应用程序的描述,所有的数据将被删除。我发现一些帖子猜测这不会发生在商店,但我没有找到任何证据。

加成语言
我观察到的另一个影响是,如果我添加一个新的语言应用(添加的ressource文件)不一样的。

请注意:以上所有解释均基于我对开发环境的观察。我还没有找到任何具体的文档,因此我建议大家非常好地测试有关用例,以免让客户感到不快。可能在几个月内,将会有更多的具体文件可用。

相关问题