【问题标题】:App Never launches successfully again after Tombstoning. No exception thrown应用程序在 Tombstoning 后再也不会成功启动。没有抛出异常
【发布时间】:2024-04-21 12:45:02
【问题描述】:

在删除墓碑后,我无法让我的应用从头开始恢复/加载。

它在以下行失败:

ServerCollection collection = AppSettings.GetSetting(AppResources.settings_servercollection) as ServerCollection;

这一行在一个在 Launching 和 Activated 内部调用的函数中。

AppSettings 类是此类Here:,但我将其修改为使用object 而不是<T>.

调试器似乎没有进入 AppSettings 功能。它还显示了我希望键入的字符串 (AppResources.settings_servercollection),所以我认为这也不是问题所在。

最后,不会抛出异常。我尝试了整个部分,并在应用程序的UnhandledExceptionNavigationFailed 中设置了断点,但我似乎从未到达其中任何一个。

以前有没有其他人经历过这种情况,或者知道原因可能是什么?

编辑:只是想指出该应用程序在清洁/重建/重新安装等之后当然可以工作。 编辑:我已经能够将其隔离为:

IsolatedStorageSettings Settings = System.IO.IsolatedStorage.IsolatedStorageSettings.ApplicationSettings;

我通过将它放在 AppSettings 的每个 Get/Set 函数中发现了这一点,并在进入该函数后看到它直接死在该行上。也就是说,有什么想法吗?

【问题讨论】:

  • 我的应用程序出现了与您类似的症状,尽管我根本没有使用隔离存储。没有收到任何异常,只是应用挂了,必须重启手机...
  • gyurisc,你发过帖子了吗?我遇到了类似的问题,这是因为我更改了我的程序集名称,并且没有更新解决方案属性来更改启动项目。
  • 我还没有时间做这个,但我会试试这个。感谢您的评论,它可能会挽救我的生命:)

标签: c# windows-phone-7


【解决方案1】:

我看到了隔离存储处于无效状态的应用问题

我猜这是你的应用程序的问题

  • 因为Windows phone 7 config / appSettings? 中发布的示例代码在您存储值后最初并未在 AppSettings 上调用 Save()(我刚刚对其进行了编辑!)
  • 因此,IsolatedStorageSettings 处于无效状态
  • 所以应用程序无法跳过private static IsolatedStorageSettings Settings 的静态初始化程序

尝试解决问题:

  • 卸载您的应用 - 这将清除您的独立存储空间
  • 将 Save() 添加到 StoreSetting() 方法的末尾
  • 再次运行

【讨论】:

  • 哎呀,我忘了提,我已经有那个 Save() 调用了。我已经使用该课程几个月了,但我忘记了我在不久前进行了更改。我将尝试重新格式化 AppSettings,看看是否可以重现任何不同的内容。
【解决方案2】:

我怀疑您的 ServerCollection 对象的序列化(和反序列化)存在问题。

在内部,传递给 IsolatedStorageSettings 的对象被序列化为 XML(使用 DataContractSerializer - 这可能是使用 IsolatedStorageSettings 的性能损失的一部分)。如果您的对象无法正确反序列化,您可能会看到此问题。

作为替代方案,我建议您自己处理 [反] 序列化,然后将序列化版本存储在 IsolatedStorageSettings 中。

【讨论】:

    【解决方案3】:

    结果证明序列化工作正常。真正的问题是我正在保存的属性中进行了一些无限递归。

    public Dictionary<string, object> Dictionary
            {
                get
                {
                    if (_dictionary == null)
                        _dictionary = new Dictionary<string, object>();
                    return _dictionary;
                }
                set
                {
                    Dictionary = value;
                }
            }
    

    正如您可能看到的那样,这不会很好地结束。太糟糕了,在我之前编写的控制台 C# 应用程序中没有“*Exception”或类似的东西。

    无论如何,感谢您的帮助。希望遇到此问题的其他人可能会发现这对您有所帮助。

    【讨论】:

      最近更新 更多