7

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

每次我对应用程序清单进行微小更改时,这些保存的文件和应用程序设置都会在应用程序启动时失效并删除。这是否仅在开发环境中如此,或者当软件包已在应用商店中发布时也会发生这种情况?

如何防止系统这样做?如果由于版本更改而丢失数据,用户将非常不高兴!

更新 1:
感谢 Hans Passant,我了解到数据文件也有一个 Version。设置数据文件版本已经解决了版本更改的问题(仅增量),但不适用于其余的清单更改。

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

4

2 回答 2

2

我的问题的答案似乎并不那么容易。最终我观察到它可能包含两个不同的问题。在网上我发现的信息很少,因此我在这里写的只是一些推测,基于我所做的一些简单测试。

版本更改
感谢 Hans Passant,我了解到数据文件可能有一个版本。由于缺乏文档,我做了如下版本测试和版本设置:

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

代码在我加载数据文件之前随时执行。因为目前我的文件格式没有任何更改,所以我将更改回调留空{}
插入上述代码后,版本更改在更改版本属性时不再删除我的应用程序数据。但是,作为测试,我后来删除了代码,出乎意料的是,任何版本更改都没有删除应用程序数据文件!也许是因为它们现在是版本化的。(附带说明:降低版本总是会导致数据文件丢失)。

General Manifest Changes
改变manifest的属性(除了Version-properties)删除数据的效果还没有消失。例如,如果我更改应用程序的描述,所有数据都将被删除。找了一些帖子猜测店里不会出现这种情况,但是没有找到任何证据。

添加语言
我观察到的另一个效果是,如果我向应用程序添加一种新语言(添加一个资源文件),也会这样做。

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

于 2012-09-08T09:47:40.017 回答
0

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

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

于 2012-09-07T12:31:51.450 回答