.NET修改配置文件

  首先说明,本文参考了这个帖子http://www.cnblogs.com/henw/archive/2012/01/31/2333783.html,进行了一些补充

  简要说来两种方法,一是把config文件当做xml文件处理,这样可以使用DOM,也可以使用linq to xml,下面的代码使用了DOM:

  

private void SetValue(String AppKey,String AppValue)
        {
             XmlDocument xDoc=new XmlDocument();
             xDoc.Load(System.Windows.Forms.Application.ExecutablePath+".config");
             XmlNode xNode;
            XmlElement xElem1;
            XmlElement xElem2;
            xNode=xDoc.SelectSingleNode("configuration").SelectSingleNode("appSettings");
            xElem1=(XmlElement)xNode.SelectSingleNode("add[@key='"+AppKey+"']");
            if(xElem1!=null)
            xElem1.SetAttribute("value",AppValue);
            else
            {
                xElem2=xDoc.CreateElement("add");
                xElem2.SetAttribute("key",AppKey);
                xElem2.SetAttribute("value",AppValue);
                xNode.AppendChild(xElem2);
            }
            xDoc.Save(System.Windows.Forms.Application.ExecutablePath+".config");
        }

  第二种就是使用.net提供System.Configuration

  

 private void ChangeConfig()
        {
            Configuration cfa = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
            //添加
            cfa.AppSettings.Settings.Add("key", "test2");
            //修改
            cfa.AppSettings.Settings["test"].Value = "test";
            cfa.Save();
        }

  第二种方法更简洁,不过再说下,这两种方法修改的都是程序生成目录下的后缀为.exe.config的文件,我上传一张我的试验项目的生成目录图

  我们要修改的应该是MailFormApp.exe.Config这个文件,而不是项目里的app.config,一些初次接触config的人不了解,可能就会认为这两种方法都无效。

  第一种指定了文件路径,而且是把config文件当文件来处理,调试和直接运行exe都能达到效果。然而使用C#提供的方法就要注意了,由于调试时程序运行在vs里头,vs是程序的宿主,所以直接F5调试的时候其实使用的是MailFormApp.vshost.exe和MailFormApp.vshost.exe.Config,所以是无法修改MailFormApp.exe.Config的。关于.vshost.exe.Config这个文件,经过我测试,调试时是先将.exe.Config文件内容copy到.vshost.exe.Config再读取该文件,所以调试时无法做到修改配置文件。但是如果直接双击运行目标exe,可以发现可以正确修改.exe.Config文件的,所以要注意不要因为在调试发现配置文件没有改误认为该方法无效。另外MailFormApp.vshost.exe只是用来寄宿在vs里头的,无法直接双击运行。

posted @ 2013-08-23 15:06  ValiancyHe  阅读(1268)  评论(0编辑  收藏  举报