如何在无法初始化时恢复配置设置

How to restore Configuration Settings when they fail to initialize

我的程序有一些应用程序设置和一些用户设置。在某些机器上,我的用户设置配置文件损坏并停止我的程序加载。然后我登录机器并删除存储在的 UserConfig 目录 %USERPROFILE%\Appdata\Local\MyApp

当我的文件损坏时抛出的错误是 Configuration Settings Failed To Initialize 所以我想知道这是否发生在我的程序中是否有办法删除损坏的文件并重置配置。

到目前为止我有:

try
{
     var prop1= Settings.Default.prop1;
}
catch (Exception ex)
{
    var userSettingsLocation =
      Path.Combine(Environment.ExpandEnvironmentVariables(
        "%USERPROFILE%"), "AppData","Local", "MyApp");
    if (Directory.Exists(userSettingsLocation))
    {
      DeleteDirectory(userSettingsLocation); // This is a reccursive
                                             // delete method
      // I need to reload settings
    }
}

这可以很好地删除文件,但是如果我尝试再次读取我的设置,例如:Settings.Reset();,我仍然会遇到同样的错误。删除损坏的文件后,我需要以某种方式重置配置设置。这可能吗?

编辑: 经过一些尝试,我认为您需要在删除错误的配置文件后重新启动应用程序。这是另一个 SO 线程:C# - User Settings broken

最后一个答案基本上就是您可以使用的代码。


实际上我认为你必须在删除文件后调用Settings.Reset

顺便说一下,您应该使用异常详细信息来获取导致问题的配置文件名:

catch(Exception ex) 
{
    if(ex.InnerException is ConfigurationErrorsException)
    {

        var settingsFile = (e.InnerException as ConfigurationErrorsException).Filename;
        /* ....Your code... */

    }
}

字符串文件名(()e.InnerException).文件名;

如果其他人想知道,这里是诀窍:

try
{
     var prop1= Settings.Default.prop1;
}
catch (Exception ex)
{
    var userSettingsLocation =
      Path.Combine(Environment.ExpandEnvironmentVariables(
        "%USERPROFILE%"), "AppData","Local", "MyApp");
    if (Directory.Exists(userSettingsLocation))
    {
         if (ex.InnerException is System.Configuration.ConfigurationException)
         {
             var settingsFile = (ex.InnerException as ConfigurationException).Filename;
             File.Delete(settingsFile);
             System.Windows.Forms.Application.Restart();
         }
    }
}