亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

基于動態修改App.Config與web.Config的使用詳解

2020-01-24 03:20:43
字體:
來源:轉載
供稿:網友

首先假設你的應用程序配置文件如下:

復制代碼 代碼如下:

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

  <appSettings>

    <add key="name" value="old"/>

  </appSettings>

</configuration>


Ok,那么如何在運行時去修改name的值呢??

有很多童鞋會說可以使用Xml讀取配置文件,然后xxx。。。。

當然這種方法肯定可以解決問題,有沒有其他方法呢??

在這里我要介紹一種比較簡單的方法,可能已經有人知道了,那就是使用ConfigurationManager

ConfigurationManager 存在System.Configuration.dll 中。

代碼如下:

復制代碼 代碼如下:

public static void Main()
{
    Console.WriteLine(ConfigurationManager.AppSettings["name"]);
    ChangeConfiguration();
    Console.WriteLine(ConfigurationManager.AppSettings["name"]);
    Console.ReadLine();
}

private static void ChangeConfiguration()
{
    //讀取程序集的配置文件
    string assemblyConfigFile = Assembly.GetEntryAssembly().Location;

    Configuration config = ConfigurationManager.OpenExeConfiguration(assemblyConfigFile);
    //獲取appSettings節點
    AppSettingsSection appSettings = (AppSettingsSection)config.GetSection("appSettings");
   

    //刪除name,然后添加新值
    appSettings.Settings.Remove("name");
    appSettings.Settings.Add("name", "new");

    //保存配置文件
    config.Save();
}


代碼很簡單:首先讀取配置文件,接著獲取appSettings節點,然后修改,接著保存。

運行:結果如下:

clip_image002

可以看到輸出的值是兩個old.

為什么??

查找msdn文檔可以發現微軟出于性能考慮,對ConfigurationManager采用了緩存策略,所以如果要讀取新的值,應該使用ConfigurationManagerRefreshSection來進行刷新,

ConfigurationManager . RefreshSection:

刷新命名節,這樣在下次檢索它時將從磁盤重新讀取它。

于是將Main方法修改為:

Console.WriteLine(ConfigurationManager.AppSettings["name"]);

ChangeConfiguration();

ConfigurationManager.RefreshSection("appSettings");

Console.WriteLine(ConfigurationManager.AppSettings["name"]);

重新清理解決方案,重新運行:

clip_image004

可以看到,仍然是兩個old。。。

為什么??  

難道值沒有修改??,我們打開應用程序的配置文件,可以通過監視assemblyConfigFile獲得路徑

上面是xxx/bin/Debug/CAStudy.exe.,對應的配置文件就是CAStudy.exe.config

clip_image006

文件的內容如下:

clip_image008

 

可以發現value 值已經更改,那么為什么輸出還是old,old 呢??

 

為了驗證不是VS2010的問題。

首先手動將CAStudy.exe.config 文件中的value改為”old”,接著再次運行CAStudy.exe 結果如下:

clip_image010 

可以看到輸出時old,和new。為什么會這樣???

難道調試時讀取的不是修改的配置文件,或者修改的配置文件并不是調試的應用程序讀取的文件??

assemblyConfigFile 中設置斷點,可以發現assemblyConfigFile 讀取的是CAStudy.exe.Config。但是vs調試的時候運行的是CAStudy.vshost.exe。也就是說我們使用ConfigurationManager.OpenExeConfiguration 打開的是CAStudy.exe.config文件,但是我們調試的應用程序CAStudy.vshost.exe使用的是CAStudy.vshost.exe.config文件。

那么還有其他的方式可以準確的獲取應用程序配置文件嗎??

有的,使用AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;

ChangeConfiguration()方法修改如下:

復制代碼 代碼如下:

private static void ChangeConfiguration()
{

    //讀取程序集的配置文件
    string assemblyConfigFile = Assembly.GetEntryAssembly().Location;
    string appDomainConfigFile = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;

    Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
   

     //獲取appSettings節點
    AppSettingsSection appSettings = (AppSettingsSection)config.GetSection("appSettings");
   

    //刪除name,然后添加新值
    appSettings.Settings.Remove("name");
    appSettings.Settings.Add("name", "new");

    //保存配置文件
    config.Save();
}


清理,重新運行:

使用默認的不傳遞字符串的版本就可以打開當前配置文件了。

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

如果要查看當前配置文件的完整路徑可以使用AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;

重新運行,結果如下:

clip_image012 

另外值得一提的是:ConfigurationManager.RefreshSection 不支持section Group.所以對于WCF的服務,你必須一個一個的RefreshSection:

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

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

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
午夜精品一区二区三区视频免费看| 欧美性videos高清精品| 精品自在线视频| 97香蕉久久夜色精品国产| 亚洲国产精品一区二区三区| 亚洲成人免费网站| 日韩电影第一页| 日韩在线观看网址| 88国产精品欧美一区二区三区| 7777免费精品视频| 国产精品99久久久久久人| 久久久精品一区二区三区| 欧美成人精品xxx| 亚洲国产成人91精品| 亚洲欧美国产另类| 久久影院资源网| 91精品久久久久久久久久另类| 欧美日韩国产色视频| 成人黄色av免费在线观看| 久久久久国色av免费观看性色| 欧美xxxx14xxxxx性爽| 91在线视频九色| 久久久久久com| 欧美激情乱人伦| 欧美有码在线视频| 成人精品福利视频| 亚洲欧洲成视频免费观看| 青青草国产精品一区二区| 亚洲天天在线日亚洲洲精| 久久精品这里热有精品| 久久男人资源视频| 亚洲激情久久久| 日韩欧美成人区| 国内精品久久久久影院优| 美女福利精品视频| 国产这里只有精品| 亚洲成人中文字幕| 国产精品久久久久一区二区| 亚洲电影中文字幕| 亚洲第一福利网站| 日韩在线免费观看视频| 清纯唯美亚洲激情| 亚洲国产精品专区久久| www.久久撸.com| 国产有码在线一区二区视频| 亚洲人成网7777777国产| 亚洲少妇激情视频| 黑丝美女久久久| 国产日本欧美一区| 久久乐国产精品| 欧美野外猛男的大粗鳮| 成人精品视频久久久久| 亚洲第一视频网站| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美亚洲视频在线观看| 日韩免费观看高清| 欧美香蕉大胸在线视频观看| 97在线视频免费观看| 成人自拍性视频| 国内精久久久久久久久久人| 国产在线不卡精品| 亚洲精品久久久久中文字幕欢迎你| 精品视频久久久久久久| 久久精品成人一区二区三区| 亚洲人成电影在线播放| 国产精品久久综合av爱欲tv| 日韩亚洲欧美成人| 国产精品视频免费在线观看| 国产精品久久不能| 国产精品久久久久久av福利软件| 日韩精品中文在线观看| 国产精品99免视看9| 日产精品久久久一区二区福利| 久久躁狠狠躁夜夜爽| 国产精品白嫩美女在线观看| 欧日韩不卡在线视频| 中文字幕一区二区三区电影| 亚洲美女av在线播放| 国产成人avxxxxx在线看| 精品动漫一区二区三区| 亚洲国产中文字幕久久网| 在线播放日韩专区| 亚洲激情视频网站| 精品视频www| 亚洲精品欧美极品| 成人黄色片在线| 亚洲欧美国产制服动漫| 欧美电影在线观看完整版| 亚洲国产精品久久久久久| 中文字幕久精品免费视频| 成人免费观看网址| 97精品一区二区三区| 国产欧美亚洲视频| 日韩av三级在线观看| 欧美国产在线电影| 久久久成人精品视频| 欧美成人免费大片| 国产精品丝袜白浆摸在线| 午夜精品蜜臀一区二区三区免费| 精品一区二区三区四区在线| 亚洲成人激情在线观看| 日韩美女写真福利在线观看| 成人激情视频网| 日韩av色综合| 久久久天堂国产精品女人| 91在线观看免费观看| 欧美日韩精品国产| 精品国产老师黑色丝袜高跟鞋| 久久久国产精品亚洲一区| 亚洲一区二区三区视频播放| 久久九九国产精品怡红院| 亚州成人av在线| 欧美丰满少妇xxxxx做受| 在线看福利67194| 欧美裸体xxxx极品少妇软件| 中文字幕日韩精品在线| 国产精品丝袜久久久久久不卡| 日本欧美一级片| 亚洲综合日韩在线| 国产a级全部精品| 97视频免费在线看| 国产精品丝袜视频| 精品国产自在精品国产浪潮| 欧美电影免费播放| 久久人人看视频| 尤物yw午夜国产精品视频明星| 国产乱肥老妇国产一区二| 91理论片午午论夜理片久久| 日本欧美爱爱爱| 亚洲 日韩 国产第一| 精品中文字幕在线观看| 亚洲第一视频在线观看| 国产精品免费久久久久影院| 亚洲福利影片在线| 国产精品视频区1| 国产精品jvid在线观看蜜臀| 国产欧美精品在线播放| 欧美有码在线视频| 国产99久久久欧美黑人| 69影院欧美专区视频| 亚洲国产精品小视频| 亚洲香蕉成人av网站在线观看| 欧美激情图片区| 亚洲第一色在线| 欧美精品激情blacked18| 日韩精品欧美国产精品忘忧草| 亚洲午夜未删减在线观看| 91av在线免费观看| 国产精品嫩草影院久久久| 国产成人拍精品视频午夜网站| 亚洲午夜性刺激影院| 精品爽片免费看久久| 精品欧美aⅴ在线网站| 日韩成人av在线播放| 日韩欧美亚洲成人| 久久精品精品电影网| 欧美成年人视频网站欧美| 亚洲人成网站999久久久综合| 国产成人av在线| 欧美黄色性视频| 亚洲国产精品久久久久久| 亚洲欧美日韩天堂一区二区| 欧美疯狂性受xxxxx另类| 亚洲午夜精品视频|