我的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);
当我不读这个文件时,下次我打开应用程序时它就消失了。
顺便说一句,为了避免混淆:每次打开它时,我不重新安装应用程序。
如果您需要更多信息,请询问。
任何帮助表示感谢。
答案 0 :(得分:3)
使用AppSettings,我在WP7 / 7.5上看到了类似的东西,但只有当我的属性值的类型是序列化程序不知道的类时才会发生。
您确定没有例外:
请注意,这并不一定意味着应用程序崩溃。我的意思是,任何例外,内部沉默或用户处理的例外。请检查VisualStudio的“输出”面板中的“第一次机会异常”日志。如果出现任何I / O或安全性或序列化异常,则在那里进行调查。如果我记得很清楚,甚至还有一整套隔离存储异常,可以通过调试/例外菜单轻松拦截。
但是,我对未知或非可序列化类型的问题并没有解释为什么你的额外非appsettings文件会消失。
另一个想法:也许一些额外的工具可以为你执行“清洁部署”之类的操作?我不记得确切,但我认为VisualStudio的部署周期很简单:
那么,也许这就是原因? 嗯..在事后的想法并再次重新阅读你的问题,你已经说过从applist运行应用程序,所以事实并非如此。请务必先检查一下例外情况!
答案 1 :(得分:0)
感谢quetzalcoatl我找到了解决方案:
我将所有文件存储在我的应用程序的根文件夹中。在开始的时候,我正在读取我的所有文件(通过DataContractSerializer)并将其投射到我的模型中。由于有时会发生我的文件损坏,我会删除每个抛出SerialzationException
的文件。但是当我读取每个文件时,由于_ApplicationSettings
不能转换为我的模型,我自动删除_ApplicationSettings
....所以我了解到ApplicationSettings只是根文件夹中的一个文件,我可以阅读和删除。所以精华就是永远不要写入根文件夹。