我建立的项目的配置文件比如为project.exe.config,我想在此项目中增加一个节点,用的是下面的方法:
Configuration config = ConfigurationManager.OpenExeConfiguration(路径+project.exe.config);AppSettingsSection app = config.AppSettings;app.Settings.Add(node, value);config.Save(ConfigurationSaveMode.Modified);这种方法怎么不能实现啊?请问如何才能正确插入这个配置文件一个节点,即使程序退出,也会保存在配置文件中!

解决方案 »

  1.   

    生成exe文件,直接运行exe文件,然后打开exe并列的config文件
      

  2.   

    我也没说不是呀。 你的程序没问题,出问题的是你运行的方式。
    使用ConfigurationManager类 读写配置文件app.config,以下为代码:view plaincopy to clipboardprint?using System;  
    using System.Configuration;  
      
    static class Program  
        {  
            static void Main()  
            {  
                showConfig();  
                UpdateAppSettings();  
                showConfig();  
      
                Console.ReadKey(true);  
            }  
      
            private static void showConfig()  
            {  
                string  = ConfigurationManager.AppSettings["Directory"];  
                Console.WriteLine("AppSetting配置节 Path key的value为:" + dir + "/n");  
            }  
      
            /// <summary>   
            /// UpdateAppSettings    
            /// </summary>   
            public static void UpdateAppSettings()  
            {  
                // Get the configuration file.    
                Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);  
                Console.WriteLine("config.FIlePath: " + config.FilePath + "/n");  
                config.AppSettings.Settings["Directory"].Value = "tset";  
      
                // Save the configuration file.    
                config.AppSettings.SectionInformation.ForceSave = true;  
                config.Save(ConfigurationSaveMode.Modified);  
                // Force a reload of the changed section.    
                ConfigurationManager.RefreshSection("appSettings");  
            }   
    using System;
    using System.Configuration;static class Program
        {
            static void Main()
            {
                showConfig();
                UpdateAppSettings();
                showConfig();            Console.ReadKey(true);
            }        private static void showConfig()
            {
                string  = ConfigurationManager.AppSettings["Directory"];
                Console.WriteLine("AppSetting配置节 Path key的value为:" + dir + "/n");
            }        /// <summary>
            /// UpdateAppSettings 
            /// </summary>
            public static void UpdateAppSettings()
            {
                // Get the configuration file. 
                Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                Console.WriteLine("config.FIlePath: " + config.FilePath + "/n");
                config.AppSettings.Settings["Directory"].Value = "tset";            // Save the configuration file. 
                config.AppSettings.SectionInformation.ForceSave = true;
                config.Save(ConfigurationSaveMode.Modified);
                // Force a reload of the changed section. 
                ConfigurationManager.RefreshSection("appSettings");
            }  
    app.config内容:view plaincopy to clipboardprint?<?xml version="1.0" encoding="utf-8" ?>  
    <configuration>  
      <appSettings>  
        <add key="Directory" value="C:/Documents and Settings"/>  
      </appSettings>  
    </configuration>  
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <appSettings>
        <add key="Directory" value="C:/Documents and Settings"/>
      </appSettings>
    </configuration>  代码结果:app.config只能作为初始化的定义,工程生成后运行程序集名称.exe 修改生成后的 程序集名称.exe.Config文件一开始调试时看到控制结果是想要的结果,但看app.config配置文件内容没变(vs2008 F5调试模式下是修改 程序集名称.vshost.exe.config配置文件)还以为是代码有问题,网上搜,也有人碰过到此现像,原来是自己没有理解到MSDN的说明。(还是有文化差异啊)如:      Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                Console.WriteLine("config.FIlePath: " + config.FilePath + "/n");查看config.filePath值,即了解明白了。
      

  3.   

    一开始调试时看到控制结果是想要的结果,但看app.config配置文件内容没变(vs2008 F5调试模式下是修改 程序集名称.vshost.exe.config配置文件)还以为是代码有问题,网上搜,也有人碰过到此现像,原来是自己没有理解到MSDN的说明。(还是有文化差异啊)如: Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
      Console.WriteLine("config.FIlePath: " + config.FilePath + "/n");查看config.filePath值,即了解明白了。
      

  4.   

    谢谢你啊,不过我还是不明白,比如在你的例程中:
    view plaincopy to clipboardprint?<?xml version="1.0" encoding="utf-8" ?>   
    <configuration>   
      <appSettings>   
      <add key="Directory" value="C:/Documents and Settings"/>   
      </appSettings>   
    </configuration> 
    我想在<appsettings>这个节点下插入一个<add key="key" value="key_value"/>,
    怎么实现啊?
      

  5.   

    Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                    config.AppSettings.Settings["ip"].Value = this.txtPort.Text;
                    config.AppSettings.Settings.Add("Asd", "aewre");
                    config.AppSettings.SectionInformation.ForceSave = true;
                    config.Save(ConfigurationSaveMode.Modified);
    这是我运行成功的例子,刚试过。lz的程序应当没有问题。 只不过运行完成后,lz应当查看 *.exe.config这个文件,而不是app.config
      

  6.   

    回复:mabaolin
    你说的这种方法不行的,修改的配置文件是 *.vhost.exe.config
    我已经弄好了,得用修改xml的方法来修改这个*.exe.config