Configuration会造成注释内容丢失

using System.Configuration;
using System.Xml;

namespace Test
{
    public static class ConfigHelper
    {
        //配置文件路径
        static string configPath = "config文件完整路径,例如:...\\XX.config";
        static Configuration c;

        static ConfigHelper()
        {
            ExeConfigurationFileMap map = new ExeConfigurationFileMap();
            map.ExeConfigFilename = configPath;
            c = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
        }

        /// <summary>
        
/// 方法一:保存APPSETTING中对应的键值
        
/// 使用该方法会造成注释丢失
        
/// </summary>
        
/// <param name="key"></param>
        
/// <param name="value"></param>
        public static void SaveAppSettingMethod1(string key, string value)
        {
            //验证key value
            
//To Do
            if (c.AppSettings.Settings[key] != null)
            {
                c.AppSettings.Settings[key].Value = value;
            }
            else
            {
                c.AppSettings.Settings.Add(key, value);
            }
            c.Save(ConfigurationSaveMode.Modified);
            ConfigurationManager.RefreshSection("appsettings");
        }

        /// <summary>
        
/// 方法二:保存AppSettings,注释内容不会丢失
        
/// </summary>
        
/// <param name="key"></param>
        
/// <param name="value"></param>
        public static void SaveAppSettingsMethod2(string key, string value)
        {
            //验证key value
            
//To Do

            XmlDocument xml = new XmlDocument();
            xml.Load(configPath);

            XmlNodeList nodeList = xml.GetElementsByTagName("appSettings");

            if (nodeList != null)
            {
                if (nodeList.Count >= 1)
                {
                    XmlNode node = nodeList[0];
                    foreach (XmlNode item in node)
                    {
                        if (item.NodeType == XmlNodeType.Comment)
                        {
                            continue;
                        }

                        XmlAttribute xaKey = item.Attributes["key"];
                        XmlAttribute xaValue = item.Attributes["value"];


                        if (xaKey != null && xaValue != null && xaKey.Value.Equals(key))
                        {
                            xaValue.Value = value;
                        }
                    }
                }
            }
            xml.Save(configPath);
        }

    }
}
 
上述代码中,方法一中使用Configuration来修改AppSettings会造成config文件中<!--XXX-->注释丢失,使用方法二中操作Xml的方法不会丢失注释内容。

 

posted @ 2012-05-15 13:57  waterfrost  阅读(809)  评论(2编辑  收藏  举报