C# 动态修改配置文件

本文详细介绍了如何在C#中扩展Configuration类,实现动态修改配置文件,包括连接字符串、appSettings配置节的读写,以及DictionarySectionHandler和SingleTagSectionHandler的处理。提供了静态属性获取配置值的方法,并给出了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    近期工作太忙了,都没有时间上上博客,生活所困,得工作呀,相信很多人都是这样。

    近期由于项目对配置文件的操作多了,原来参考网络的同僚思想写了个读和写配置的类,但都是针对appSettings 节点,对配置节没有更多的实现,但很多项目如果配置的内容多了,以配置节来分类比较清晰(有很多配置直接使用XML,但我还是偏好Frameword带schema的config文件)。现在写下自己的实现,以方便大家参考(此处的配置文件是指独立的config文件,不是App.config文件)。

1、扩展Configuration类的功能。些功能使用Framework的扩展方法,使用起来更象是Configuration的功能一样。扩展方法不是本文件要介绍的内容。

命名空间:namespace System.Configuration

和Configuration的命名空间相同,虽然有时忘记引入该扩展类所在的程序集,以导致扩展方法不知道在哪里,但本人觉得使用相同的命名空间,更加似Configuration的功能。

类名:public static class ConfigurationExtensions     扩展方法得使用静态类。

2、实现:在网上,有位仁兄使用自定义一个Section节来实现NameValue的做法,虽然的可行,但在配置节的设置上得带有自己的程序集的限定名等,本人不喜欢,Framework都有NameValeElement 和 KeyValueElement等的定义,相似的做法,我们又何必多些一番工作!不过还多谢哪位高手的代码,做了不少参考。(本人发觉Microsoft随着新版本的更新,以前很多可以直接操作其本框架的功能都被屏蔽了,不知道是否制约做IDE工具的开源框架,以减少对VS的竞争的原因吧)。还有位高手直接通过XMLDocumet来操作,应该也不是好的解决方案。

扩展Configuration的功能 

获取连接字符串

ExpandedBlockStart.gif View Code
         /// <summary> 依据连接串名字connectionName返回数据连接字符串  </summary>  
        
/// <param name="connectionName"> 连接串的 </param>  
        
/// <param name="config"></param>
        
/// <returns></returns>  
         public  static  string GetConnectionStringsConfig( this Configuration config,  string connectionName)
        {
             string connectionString = config.ConnectionStrings.ConnectionStrings[connectionName].ConnectionString;
             /// /Console.WriteLine(connectionString); 
             return connectionString;
        }

 

更新连接字符串

ExpandedBlockStart.gif View Code
         /// <summary>  
        
/// 更新连接字符串  
        
/// </summary>  
        
/// <param name="newName"> 连接字符串名称 </param>  
        
/// <param name="newConString"> 连接字符串内容 </param>  
        
/// <param name="newProviderName"> 数据提供程序名称 </param>  
        
/// <param name="config"> Configuration实例 </param>
         public  static  void UpdateConnectionStringsConfig( this Configuration config,  string newName,  string newConString,  string newProviderName)
        {
             bool isModified =  false;
             // 记录该连接串是否已经存在      
            
// 如果要更改的连接串已经存在      
             if (config.ConnectionStrings.ConnectionStrings[newName] !=  null)
            { isModified =  true; }

             // 新建一个连接字符串实例      
            ConnectionStringSettings mySettings =  new ConnectionStringSettings(newName, newConString, newProviderName);

             //  如果连接串已存在,首先删除它      
             if (isModified)
            {
                config.ConnectionStrings.ConnectionStrings.Remove(newName);
            }
             //  将新的连接串添加到配置文件中.      
            config.ConnectionStrings.ConnectionStrings.Add(mySettings);
             //  保存对配置文件所作的更改      
            config.Save(ConfigurationSaveMode.Modified);
        }

 

获取appSettings配置节的value项

ExpandedBlockStart.gif View Code
         /// <summary>  
        
/// 返回config文件中appSettings配置节的value项  
        
/// </summary>  
        
/// <param name="strKey"></param>  
        
/// <param name="config"> Configuration实例 </param>
        
/// <returns></returns>  
         public  static  string GetAppSettingsItemValue( this Configuration config,  string strKey)
        {
             foreach (KeyValueConfigurationElement key  in config.AppSettings.Settings)
            {
                 if (key.Key == strKey)
                {
                     return config.AppSettings.Settings[strKey].Value;
                }
            }
             return  string.Empty;
        }

 

获取所有的appSettings的节点

ExpandedBlockStart.gif View Code
         ///   <summary>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值