因此,我做了相当多的研究来试图解决这个问题,但似乎无法 1) 重现该问题,但更重要的是 2) 找到一个最新的解决方案来修复它。
这种情况在两周内已经发生过两次,其中 user.config 文件会随机损坏(例如,XML 文件的块会丢失),从而导致应用程序在下次启动时崩溃。
悬崖笔记:
我需要一个最新的解决方案来以编程方式处理这个问题(即是否是来自CodeProject 对损坏的用户配置的处理 https://www.codeproject.com/Articles/30216/Handling-Corrupt-user-config-Settings或不同的帖子
我还需要一个可重现的案例来“损坏” user.config 文件(除了删除其中的大部分内容,因为它对我不起作用),以便能够测试上面的#1。
我遇到的解决方案:
我知道您可以手动导航到疯狂的路径 (.../AppData/..././1.0.0.0/user.config) 并将其删除并重新运行应用程序,但是,这不是一个合适的解决方案为了我们。我们需要能够以编程方式捕获此错误,并进行相应的处理。如果可能的话,最好不必重新启动应用程序。
我发现了一些帖子/答案,它们与本文的版本略有不同CodeProject 对损坏的用户配置的处理 https://www.codeproject.com/Articles/30216/Handling-Corrupt-user-config-Settings他们使用与该链接相同的机制,或者使用 ConfigurationManager 命令打开配置文件并捕获异常。
我尝试过的:
我的问题之一是我似乎无法访问 C# 4.5.2 中的 ConfigurationManager 类。但 MSDN 文档说它在当前框架中可用。所以我无法真正尝试
当我尝试手动“损坏”我的 user.config 文件来测试我的解决方案时,它没有给我带来任何问题,并且应用程序运行良好......这是令人担忧的,因为我找不到可重现的案例来测试是否给定的解决方案有效(即上面链接中提供的不使用 ConfigurationManager 的解决方案)
任何帮助将不胜感激!
要手动损坏文件,只需删除其中的所有文本并保存文件即可。
为了访问ConfigurationManager
类,您必须添加 DLL 引用System.Configuration
。如果您需要添加参考的帮助,请按照下列步骤操作online https://msdn.microsoft.com/en-us/library/wkze6zky.aspx:
- 在“解决方案资源管理器”中,右键单击项目节点,然后单击“添加引用”。
- 在“添加引用”对话框中,选择指示要引用的组件类型的选项卡。
- 选择要引用的组件,然后单击“确定”。
为了解决损坏问题,您可以使用 try/catch 块,如下所示:
try {
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal);
}
catch (ConfigurationErrorsException exception) {
Console.WriteLine("Settings are Corrupt!!");
// handle error or tell user
// to manually delete the file, you can do the following:
File.Delete(exception.Filename); // this can throw an exception too, so be wary!
}
编辑:作为进一步说明,请注意,如果您有Settings.Upgrade()
在任何地方调用并且您的“旧”文件已损坏,这也会使软件崩溃。确保包围你的Settings.Upgrade()
打电话给try/catch
块也。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)