2017-03-10 177 views
1

所以我已经做了很多研究,试图解决这个问题,但似乎无法1)重现问题,但更重要的是2)找到一个更新的解决方案,以修复它。User.config损坏

它已经在2周内发生过两次,随机的user.config文件将被损坏(例如,将丢失XML文件块),从而导致下次启动时应用程序崩溃。

Cliffnotes:

  1. 我需要处理这一问题编程(即无论是从CodeProject Handling Of Corrupted User Config岗位或不同岗位的先进的最新解决方案

  2. 我还需要一个可重复的情况下,“损坏”user.config文件(除了删除它的块,因为它不适用于我)能够测试#1以上的内容

个解决我遇到:

  1. 我知道,你可以手动导航到疯狂的路径(.../AppData的/..././ 1.0.0.0/user.config),并删除它并重新运行应用程序,但是,这不适合我们。我们需要能够以编程方式捕捉这个错误,并相应地处理它。如果可能的话,最好不必重新启动应用程序。

  2. 我已经发现了几个帖子/答案,一些稍微不同的版本本文CodeProject Handling Of Corrupted User Config 他们请使用相同的机制,链接,或使用ConfigurationManager中命令打开配置文件并捕获异常。

我已经试过:

  1. 我的一个问题是,我似乎无法访问C#4.5.2 ConfigurationManager中类。但MSDN文档说它在当前框架中可用。所以我真的不能尝试

  2. 当我尝试手动“损坏”我的user.config文件来测试我的解决方案时,它没有给我任何问题,并且应用程序工作正常......这是令人担忧的,因为我无法找到一个可重复的情况下,以测试定解决方案是否有效(即,在上面的链接提供的一个不使用ConfigurationManager中)

任何帮助将不胜感激!

+0

有人有任何线索或提示可能可以帮助吗? – hpradogu

+0

将一些二进制文件放在那里(如.dotx文件)以重现问题 –

+0

就像同一个目录中的新文件一样?是不是“只”搜索user.config?或者我错过了什么? – hpradogu

回答

0

要手动破坏您的文件,只需删除其中的所有文本并保存该文件。

为了访问ConfigurationManager类,您必须添加一个DLL参考System.Configuration。如果您需要帮助添加引用,这些都是上市online步骤:

  1. 在Solution Explorer中,右键单击该项目节点,然后单击添加引用。
  2. 在“添加引用”对话框中,选择指示要引用的组件类型的选项卡。
  3. 选择要引用的组件,然后单击确定。

为了解释腐败,你可以使用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块同时包围。