我如何重新加载app.config文件数据

时间:2017-05-15 08:52:22

标签: c#

我有一个程序可以编辑app.config文件并保存。但是我可以编辑和保存,但我无法重新启动app.config数据而无需重新启动应用程序。 我尝试了几种方法。我不确定有什么问题

这是我的代码..

private void btnSave_Click(object sender, EventArgs e)
{            
     UpdateConfig("IP",radtxtIP.Text, "myApp.exe");
     UpdateConfig("port", radtxtPort.Text, "myApp.exe");
     LoadConfigData();
}
private void UpdateConfig(string key, string value, string fileName)
{
    var configFile = ConfigurationManager.OpenExeConfiguration(fileName);
    configFile.AppSettings.Settings[key].Value = value;
    configFile.Save(); 
}

 public void LoadConfigData()
 {
      ConfigurationManager.RefreshSection("appSettings");
      Properties.Settings.Default.Reload();
      radtxtIP.Text =  ConfigurationManager.AppSettings["IP"];
      radtxtPort.Text = ConfigurationManager.AppSettings["port"];  
 }

当我点击保存按钮时,它会给我旧的设置。 我在阅读stackoverflow中的一些问题之后添加了这段代码,但没有使用

ConfigurationManager.RefreshSection("appSettings");
Properties.Settings.Default.Reload();

我是否需要创建ConfigurationManager的新实例? 我使用配置数据的方式是否正常。 我的应用程序在很多地方使用app.config数据。因此,在更改配置数据时必须重新启动应用程序。

2 个答案:

答案 0 :(得分:1)

我使用过这样的东西,并希望这个很容易

class SettingsService
{

    public static string GetSetting(string key)
    {
        System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
        return config.AppSettings.Settings[key].Value.ToString();
    }

    public static void UpdateConfig(string key, string value )
    {
        var configFile = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
        configFile.AppSettings.Settings[key].Value = value;
        configFile.Save(ConfigurationSaveMode.Modified); 
    }
}

可以通过调用UpdateConfig("key1","value")方法更新appsettings 并且可以使用此GetSetting("key")

进行设置

注意: - 当使用VS运行应用程序时,它只更新ApplicationName.vshost.exe(配置文件)

答案 1 :(得分:0)

您可能会发现这有用https://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.refreshsection.aspx

请确保加载新设置,如下所示

// Get the AppSettings section.
AppSettingsSection appSettingSection = (AppSettingsSection)config.GetSection(sectionName);