public static void CreateAppSettings()
{
  System.Configuration.Configuration config =
    ConfigurationManager.OpenExeConfiguration(
          ConfigurationUserLevel.None);
  string sectionName = "appSettings";
  int appStgCnt =
      ConfigurationManager.AppSettings.Count;
  string newKey = "NewKey" + appStgCnt.ToString();
  string newValue = DateTime.Now.ToLongDateString() + 
    " " + DateTime.Now.ToLongTimeString();
  config.AppSettings.Settings.Add(newKey, newValue);
  config.Save(ConfigurationSaveMode.Modified);
  //msdn说:刷新命名节,这样在下次检索它时将从磁盘重新读取它。
  //这是个静态方法,怎么能影响config的配置啊?
  //所有的配置信息是在config对象里面啊?
  ConfigurationManager.RefreshSection(sectionName);
  AppSettingsSection appSettingSection =
    (AppSettingsSection)config.GetSection(sectionName);
  Console.WriteLine();
  Console.WriteLine("Using GetSection(string).");
  Console.WriteLine("AppSettings section XML:");
  Console.WriteLine(
    appSettingSection.SectionInformation.GetRawXml());
}ConfigurationManager.RefreshSection(sectionName);
这个是个静态方法,

解决方案 »

  1.   

    ConfigurationManager.RefreshSection 功能是刷新最新的配置内容。配置文件默认首次读取,以后不会默认更改,
    如果程序已经运行,这时你修改了配置文件,就必须调用该方法以刷新到最新修改。
      

  2.   

    我把这句注释:
    Console.WriteLine(
        appSettingSection.SectionInformation.GetRawXml());得到的信息也是最新的啊?内容也随着:
    config.AppSettings.Settings.Add(newKey, newValue);
    改变而改变啊?
      

  3.   

    注释掉这句:
    ConfigurationManager.RefreshSection(sectionName);
      

  4.   

    是的,这个一般是修改config文件后才会用到的方法.
      

  5.   


    static Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            static void Main(string[] args)
            {
                GetAppSettings();
                CreateAppSettings();
                GetAppSettings();
                Console.Read();
            }
            /// <summary>
            /// 创建节点
            /// </summary>
            public static void CreateAppSettings()
            {
                int appStgCnt = ConfigurationManager.AppSettings.Count;
                string newKey = "NewKey" + appStgCnt.ToString();
                string newValue = DateTime.Now.ToLongDateString() + " " + DateTime.Now.ToLongTimeString();
                config.AppSettings.Settings.Add(newKey, newValue);
                config.Save(ConfigurationSaveMode.Modified);
                //ConfigurationManager.RefreshSection("appSettings"); 
            }
            /// <summary>
            /// 获得节点信息
            /// </summary>
            public static void GetAppSettings()
            {
                AppSettingsSection appSettingSection = (AppSettingsSection)config.GetSection("appSettings");
                Console.WriteLine(appSettingSection.SectionInformation.GetRawXml());
            }
      

  6.   

    楼主,你的config是通过
    ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
    得到的,因此无需添加
    ConfigurationManager.RefreshSection(sectionName);
    那个方法只对ConfigurationManager.AppSettings[""]这类静态属性有影响,直接通过OpenExeConfiguration方法打开的特殊对象不受影响。
    换句话说,你那段代码是多余的。
      

  7.   

    我觉得MSDN说得已经很明白了,调用它之后,再使用config.GetSection(sectionName)时,总是从配置文件中重新读取(而不是从先前读取出来的Config对象中,不管Config对象在保存之前做了什么修改)
      

  8.   

    各位高手还有些问题:
    就是,我把上面的代码换成
      System.Configuration.Configuration config =
        ConfigurationManager.OpenExeConfiguration(
              ConfigurationUserLevel.PerUserRoaming);
    保存时出错:
    “不能编辑已锁定的 ConfigurationSection 属性。”
      

  9.   

    (分不是好多,能问点就多问点)!^_^
    我在一个配置文件添加了几个固定的key,下次程序运行时,怎么修改这些key对应的value?
    public void SetUi()
    {
        try
        {
            tbCn.Text = conf.AppSettings.Settings["tbCn"].Value;
            tbCn1.Text = conf.AppSettings.Settings["tbCn1"].Value;
            tbEn.Text = conf.AppSettings.Settings["tbEn"].Value;
            tbEn1.Text = conf.AppSettings.Settings["tbEn1"].Value;
        }
        catch (Exception)
        {
        }
    }
    public void SaveUi()
    {
        try
        {
    //这里每次都要Clear一下,不然如果原先有这个key时,value就会以","添加并没有覆盖
            AppSettings.Settings.Clear();
            AppSettings.Settings.Add("tbCn", form.tbCn.Text);
            AppSettings.Settings.Add("tbCn1", form.tbCn1.Text);
            AppSettings.Settings.Add("tbEn", form.tbEn.Text);
            AppSettings.Settings.Add("tbEn1", form.tbEn1.Text);
            Save(ConfigurationSaveMode.Modified);
            ConfigurationManager.RefreshSection(sectionName);    }
        catch (Exception)
        {
        }
    }