6

我的 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-Dictionary 包含零(0)键和值。

我错过了什么吗?

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

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

我还看到,当我将文件写入IsolatedStoragewith 时:

SharedStorageAccessManager.CopySharedFileAsync(
    Windows.Storage.ApplicationData.Current.LocalFolder, fileName+"orig", 
    Windows.Storage.NameCollisionOption.ReplaceExisting, fileID);

然后当我不读取此文件时,下次打开应用程序时它就消失了。

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

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

任何帮助表示赞赏。

4

2 回答 2

3

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

你确定没有例外:

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

请注意,这并不一定意味着应用程序崩溃。我的意思是,任何例外,那些内部静音或用户处理的。请检查 VisualStudio 的输出面板中的“第一次机会异常”日志。如果出现任何 I/O 或安全或序列化异常,请在那里进行调查。如果我没记错的话,甚至还有一整套隔离存储异常,可以很容易地从调试/异常菜单中截获。

但是,我遇到的未知或不可序列化类型的问题根本无法解释为什么您的额外非 appsettings 文件会消失。

另一个想法:也许一些额外的工具会为您执行“干净部署”之类的操作?我记不太清了,但我认为 VisualStudio 的部署周期很简单:

  • 重建
  • 从设备中删除/卸载旧应用程序 - 所以可能会清除隔离存储
  • 在设备上安装新应用

那么,也许这就是原因?嗯..在事后重新阅读您的问题时,您已经说过要从应用程序列表运行应用程序,所以事实并非如此。然后一定要检查 firstchance 异常!

于 2013-06-13T13:07:50.693 回答
0

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

于 2013-06-13T19:41:44.147 回答