博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
修改 App.Config 配置文件 C#
阅读量:4947 次
发布时间:2019-06-11

本文共 3446 字,大约阅读时间需要 11 分钟。

[转]

今天在个WCF程序中加入了修改配置文件的功能。我是直接通过IO操作修改的app.config文件内容,修改后发现发现其并不生效,用Google搜了一下,在园子里的文章中找到了解决方案。

原来,.net framework中对于配置文件不是实时读取的,而是有缓存的。对于那些已经更新了的内容,需要调用ConfigurationManager.RefreshSection(需要添加System.Configuration.dll的引用)函数刷新相应节点。

比较蛋疼的是,这个函数并不支持刷新Group。也就是说,我们不能通过ConfigurationManager.RefreshSection("system.serviceModel")一句话实现对WCF的配置刷新,需要调用如下四句话才行。

    ConfigurationManager.RefreshSection("system.serviceModel/behaviors");

    ConfigurationManager.RefreshSection("system.serviceModel/bindings");
    ConfigurationManager.RefreshSection("system.serviceModel/client");
    ConfigurationManager.RefreshSection("system.serviceModel/services");

另外,值得一提的是:如果用IO操作修改修改app.config配置,直接使用相对路径"myapp.exe.config"来修改不可靠的,很容易出现找不到配置文件的异常(原因有很多种),需要使用AppDomain.CurrentDomain.SetupInformation.ConfigurationFile属性来获取配置文件的完整路径。

我一开始在这两个网站找到的提示

http://developer.51cto.com/art/200908/146303.htm

http://www.codeproject.com/Articles/14744/Read-Write-App-Config-File-with-NET

结果调试结果不太稳定, 修改了好几次,代码如下 

1     public class RWConfig 2     { 3         ///  4         /// 读 ConnectionStrings 节点 ConnectionName 的连接字符串 5         /// 节点不存在时返回 null 6         ///  7         public static string GetConnectionStringConfig(string ConnectionName) 8         { 9             if (ConfigurationManager.ConnectionStrings[ConnectionName] == null)10                 return null;11             return ConfigurationManager.ConnectionStrings[ConnectionName].ConnectionString.ToString();12         }13 14         /// 15         /// 获得指定配置节点的值16         /// 节点不存在时返回 null17         /// 18         public static string GetAppConfig(string strKey)19         {20             if (ConfigurationManager.AppSettings[strKey] == null)21                 return null;22             return ConfigurationManager.AppSettings[strKey].ToString();23         }24 25         // 写 Config 不稳定26         public static void AddConnectionStringConfig(string newName, string newConString, string newProvideName)27         {28             // 新建一个连接字符串29             ConnectionStringSettings mySettings = new ConnectionStringSettings(newName, newConString, newProvideName);30             // 打开配置文件31             //Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);32             Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);33             if (ConfigurationManager.ConnectionStrings[newName] != null)34                 config.ConnectionStrings.ConnectionStrings.Remove(newName);35             // 添加新的连接字符串36             config.ConnectionStrings.ConnectionStrings.Add(mySettings);37             // 保存对配置文件的更改38             config.Save(ConfigurationSaveMode.Minimal);39             ConfigurationManager.RefreshSection("connectionStrings");40         }41 42         public static void AddAppConfig(string newKey, string newValue)43         {44             //Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);45             Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);46             if (ConfigurationManager.AppSettings[newKey] != null)47                 config.AppSettings.Settings.Remove(newKey);48             config.AppSettings.Settings.Add(newKey, newValue);49             config.Save(ConfigurationSaveMode.Minimal);50             ConfigurationManager.RefreshSection("appSettings");51         }52     }

 

转载于:https://www.cnblogs.com/z5337/p/3676782.html

你可能感兴趣的文章
Java动态代理
查看>>
单变量微积分笔记23——部分分式
查看>>
Verilog_Day3
查看>>
Entity Framework Code First添加修改及删除外键关联实体
查看>>
C#中控件的CheckState和Checked属性区别?
查看>>
(转载)柯里化函数应用
查看>>
Codeforces Round #341 (Div. 2)
查看>>
【代码笔记】iOS-自定义开关
查看>>
观察者设计模式
查看>>
把nginx加入系统服务!!
查看>>
sql事务(Transaction)用法介绍及回滚实例
查看>>
C++各大有名库的介绍
查看>>
35-02单页面上拉加载例子
查看>>
你从哪里来
查看>>
Nginx反向代理配置
查看>>
获取url中的参数(微信开发)
查看>>
【原创】.Net 微信 JS-SDK图片、语音上传接口的实现(MVC)-(一 、上传图片)...
查看>>
PHP扩展
查看>>
【转】Scala片段 1:Folding
查看>>
Redis 持久化
查看>>