Windows Phone 8,应用程序设置没有持久化

时间:2013-06-13 11:06:14

标签: c# windows-phone-8 isolatedstorage

我的Windows Phone 8,C#App。

中有以下奇怪的行为

我正在保存设置:

private void SaveProperty<T>(T property, string propertyName)
    {
        if (IsolatedStorageSettings.ApplicationSettings.Contains(propertyName))
            IsolatedStorageSettings.ApplicationSettings[propertyName] = property;
        else
            IsolatedStorageSettings.ApplicationSettings.Add(propertyName, property);

        IsolatedStorageSettings.ApplicationSettings.Save();
    }

当应用运行时,我可以读取我在IsolatedStorageSettings.ApplicationSettings中存储的所有设置。

但是当我重新打开我的应用程序(从应用程序列表中打开它)时,IsolatedStorageSettings.ApplicationSettings - 词典包含零(0)键和值。

我错过了什么吗?

我使用ISETool.exe拍摄我的应用程序的IsolatedStorage快照(感谢chepene)。 我看到了这种行为:当我编写设置(这意味着在SaveProperty<T>()功能完成后),并且应用程序仍在运行时,我将设置保存在_ApplicationSettings中。这与我的观察结果一致,我可以在应用程序运行时从IsolatedStorageSettings.ApplicationSettings读取。 逻辑删除或未运行时_ApplicationSettings - 文件也存在(当我可以通过按住手机的后退按钮来访问它时,使用后退按钮关闭应用程序)。

但是当应用程序再次打开时(通过应用程序列表),_ApplicationSettings - 文件就消失了......

当我将文件写入IsolatedStorage并使用:

时,我也看到了这一点
SharedStorageAccessManager.CopySharedFileAsync(
    Windows.Storage.ApplicationData.Current.LocalFolder, fileName+"orig", 
    Windows.Storage.NameCollisionOption.ReplaceExisting, fileID);

当我不读这个文件时,下次我打开应用程序时它就消失了。

顺便说一句,为了避免混淆:每次打开它时,我重新安装应用程序。

如果您需要更多信息,请询问。

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:3)

使用AppSettings,我在WP7 / 7.5上看到了类似的东西,但只有当我的属性值的类型是序列化程序不知道的类时才会发生。

您确定没有例外:

    保存期间
  • 在应用程序退出期间
  • (因为应用程序可能会在此时转储设置)
  • 在App启动后第一次加载设置的时间?

请注意,这并不一定意味着应用程序崩溃。我的意思是,任何例外,内部沉默或用户处理的例外。请检查VisualStudio的“输出”面板中的“第一次机会异常”日志。如果出现任何I / O或安全性或序列化异常,则在那里进行调查。如果我记得很清楚,甚至还有一整套隔离存储异常,可以通过调试/例外菜单轻松拦截。

但是,我对未知或非可序列化类型的问题并没有解释为什么你的额外非appsettings文件会消失。

另一个想法:也许一些额外的工具可以为你执行“清洁部署”之类的操作?我不记得确切,但我认为VisualStudio的部署周期很简单:

  • 重建
  • 从设备中删除/卸载旧应用 - 因此可能清除lonelystorage
  • 将新应用安装到设备上

那么,也许这就是原因? 嗯..在事后的想法并再次重新阅读你的问题,你已经说过从applist运行应用程序,所以事实并非如此。请务必先检查一下例外情况!

答案 1 :(得分:0)

感谢quetzalcoatl我找到了解决方案: 我将所有文件存储在我的应用程序的根文件夹中。在开始的时候,我正在读取我的所有文件(通过DataContractSerializer)并将其投射到我的模型中。由于有时会发生我的文件损坏,我会删除每个抛出SerialzationException的文件。但是当我读取每个文件时,由于_ApplicationSettings不能转换为我的模型,我自动删除_ApplicationSettings ....所以我了解到ApplicationSettings只是根文件夹中的一个文件,我可以阅读删除。所以精华就是永远不要写入根文件夹。