更改WinRT应用程序的appmanifest会破坏应用程序数据

时间:2012-09-07 11:46:21

标签: microsoft-metro windows-runtime

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

每次我对app-manifest进行微小更改时,这些保存的文件和应用程序设置都将在应用启动时失效并删除。这仅在开发环境中是这样还是会当包在app-store中发布时也会发生?

如何阻止系统执行此操作?如果用户因版本更改而丢失数据,用户将非常不满意!

更新1:
感谢Hans Passant,我也了解到data files have a Version。设置数据文件版本已修复版本更改的问题(仅限增量),但不会修复其他清单更改。

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

2 个答案:

答案 0 :(得分:2)

我的问题的答案似乎并不那么容易。最后我发现它可能包含两个不同的问题。在网上我发现只有非常little Information,因此我在这里写的所有内容都是基于我所做的一些简单测试的一点推测。

版本更改
感谢Hans Passant,我了解到数据文件可能有version。由于缺少文档,我按如下方式进行版本测试和版本设置:

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

在加载数据文件之前,代码随时都会执行。因为我目前没有更改文件格式,所以我将更改回调留空{} 插入上述代码后,版本更改在更改版本属性时不再删除我的应用数据。但是,作为测试后我删除了代码,并且意外地,任何版本更改都不再删除应用程序数据文件!也许是因为他们现在都是版本的。 (作为旁注:在丢失数据文件时减少版本结果)。

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

添加语言
我观察到的另一个影响是,如果我向应用程序添加一种新语言(添加一个ressource-file)也会这样做。

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

答案 1 :(得分:0)

这应该只在开发环境中发生。发布应用程序后,清单将被修复并且不会更改*。

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