最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于動(dòng)態(tài)修改App.Config與web.Config的使用詳解

 更新時(shí)間:2013年05月13日 18:37:01   作者:  
本篇文章是對(duì)動(dòng)態(tài)修改App.Config與web.Config的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下

首先假設(shè)你的應(yīng)用程序配置文件如下:

復(fù)制代碼 代碼如下:

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

<configuration>

  <appSettings>

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

  </appSettings>

</configuration>


Ok,那么如何在運(yùn)行時(shí)去修改name的值呢??

有很多童鞋會(huì)說(shuō)可以使用Xml讀取配置文件,然后xxx。。。。

當(dāng)然這種方法肯定可以解決問(wèn)題,有沒(méi)有其他方法呢??

在這里我要介紹一種比較簡(jiǎn)單的方法,可能已經(jīng)有人知道了,那就是使用ConfigurationManager類(lèi)

ConfigurationManager 存在System.Configuration.dll 中。

代碼如下:

復(fù)制代碼 代碼如下:

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節(jié)點(diǎn)
    AppSettingsSection appSettings = (AppSettingsSection)config.GetSection("appSettings");
   

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

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


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

運(yùn)行:結(jié)果如下:

clip_image002

可以看到輸出的值是兩個(gè)old.

為什么??

查找msdn文檔可以發(fā)現(xiàn)微軟出于性能考慮,對(duì)ConfigurationManager采用了緩存策略,所以如果要讀取新的值,應(yīng)該使用ConfigurationManagerRefreshSection來(lái)進(jìn)行刷新,

ConfigurationManager . RefreshSection:

刷新命名節(jié),這樣在下次檢索它時(shí)將從磁盤(pán)重新讀取它。

于是將Main方法修改為:

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

ChangeConfiguration();

ConfigurationManager.RefreshSection("appSettings");

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

重新清理解決方案,重新運(yùn)行:

clip_image004

可以看到,仍然是兩個(gè)old。。。

為什么??  

難道值沒(méi)有修改??,我們打開(kāi)應(yīng)用程序的配置文件,可以通過(guò)監(jiān)視assemblyConfigFile獲得路徑

上面是xxx\bin\Debug\CAStudy.exe.,對(duì)應(yīng)的配置文件就是CAStudy.exe.config

clip_image006

文件的內(nèi)容如下:

clip_image008

 

可以發(fā)現(xiàn)value 值已經(jīng)更改,那么為什么輸出還是old,old 呢??

 

為了驗(yàn)證不是VS2010的問(wèn)題。

首先手動(dòng)將CAStudy.exe.config 文件中的value改為”old”,接著再次運(yùn)行CAStudy.exe 結(jié)果如下:

clip_image010 

可以看到輸出時(shí)old,和new。為什么會(huì)這樣???

難道調(diào)試時(shí)讀取的不是修改的配置文件,或者修改的配置文件并不是調(diào)試的應(yīng)用程序讀取的文件??

assemblyConfigFile 中設(shè)置斷點(diǎn),可以發(fā)現(xiàn)assemblyConfigFile 讀取的是CAStudy.exe.Config。但是vs調(diào)試的時(shí)候運(yùn)行的是CAStudy.vshost.exe。也就是說(shuō)我們使用ConfigurationManager.OpenExeConfiguration 打開(kāi)的是CAStudy.exe.config文件,但是我們調(diào)試的應(yīng)用程序CAStudy.vshost.exe使用的是CAStudy.vshost.exe.config文件。

那么還有其他的方式可以準(zhǔn)確的獲取應(yīng)用程序配置文件嗎??

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

ChangeConfiguration()方法修改如下:

復(fù)制代碼 代碼如下:

private static void ChangeConfiguration()
{

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

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

     //獲取appSettings節(jié)點(diǎn)
    AppSettingsSection appSettings = (AppSettingsSection)config.GetSection("appSettings");
   

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

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


清理,重新運(yùn)行:

使用默認(rèn)的不傳遞字符串的版本就可以打開(kāi)當(dāng)前配置文件了。

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

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

重新運(yùn)行,結(jié)果如下:

clip_image012 

另外值得一提的是:ConfigurationManager.RefreshSection 不支持section Group.所以對(duì)于WCF的服務(wù),你必須一個(gè)一個(gè)的RefreshSection:

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

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

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

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

相關(guān)文章

  • C#讀取與寫(xiě)入txt文件內(nèi)容的實(shí)現(xiàn)方法

    C#讀取與寫(xiě)入txt文件內(nèi)容的實(shí)現(xiàn)方法

    在 C# 中讀取和寫(xiě)入文本文件內(nèi)容是一個(gè)常見(jiàn)的任務(wù),本文主要介紹了使用幾種不同方法讀取和寫(xiě)入文本文件的示例,并通過(guò)代碼示例介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-08-08
  • DevExpress之ChartControl實(shí)現(xiàn)餅狀圖百分比演示實(shí)例

    DevExpress之ChartControl實(shí)現(xiàn)餅狀圖百分比演示實(shí)例

    這篇文章主要介紹了DevExpress之ChartControl實(shí)現(xiàn)餅狀圖百分比演示的方法,實(shí)例講述了窗體與圖形繪制函數(shù)的用法,需要的朋友可以參考下
    2014-10-10
  • C#中sealed關(guān)鍵字的具體使用

    C#中sealed關(guān)鍵字的具體使用

    在C#中sealed關(guān)鍵字用于阻止類(lèi)被繼承或成員被重寫(xiě),它可以與class一起使用,本文主要介紹了C#中sealed關(guān)鍵字的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-01-01
  • WPF實(shí)現(xiàn)帶篩選功能的DataGrid

    WPF實(shí)現(xiàn)帶篩選功能的DataGrid

    在默認(rèn)情況下,WPF提供的DataGrid僅擁有數(shù)據(jù)展示等簡(jiǎn)單功能,如果要實(shí)現(xiàn)像Excel一樣復(fù)雜的篩選過(guò)濾功能,則相對(duì)比較麻煩。本文以一個(gè)簡(jiǎn)單的小例子,簡(jiǎn)述如何通過(guò)WPF實(shí)現(xiàn)DataGrid的篩選功能,僅供學(xué)習(xí)分享使用,如有不足之處,還請(qǐng)指正
    2023-03-03
  • C#中JSON轉(zhuǎn)為實(shí)體類(lèi)和List以及結(jié)合使用

    C#中JSON轉(zhuǎn)為實(shí)體類(lèi)和List以及結(jié)合使用

    開(kāi)發(fā)中經(jīng)常遇到將JSON字符串轉(zhuǎn)換為L(zhǎng)ist的需求,下面這篇文章主要給大家介紹了關(guān)于C#中JSON轉(zhuǎn)為實(shí)體類(lèi)和List以及結(jié)合使用的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • C#泛型運(yùn)作原理的深入理解

    C#泛型運(yùn)作原理的深入理解

    這篇文章主要給大家介紹了關(guān)于C#泛型運(yùn)作原理的深入理解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Linq兩個(gè)List集合取交集的實(shí)現(xiàn)

    Linq兩個(gè)List集合取交集的實(shí)現(xiàn)

    這篇文章主要介紹了Linq兩個(gè)List集合取交集的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • C#使用udp如何實(shí)現(xiàn)消息的接收和發(fā)送

    C#使用udp如何實(shí)現(xiàn)消息的接收和發(fā)送

    這篇文章主要介紹了C#使用udp如何實(shí)現(xiàn)消息的接收和發(fā)送問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C# 漢字轉(zhuǎn)拼音(全拼和首字母)實(shí)例

    C# 漢字轉(zhuǎn)拼音(全拼和首字母)實(shí)例

    這篇文章介紹了C# 漢字轉(zhuǎn)拼音(全拼和首字母)實(shí)例代碼,有需要的朋友可以參考一下
    2013-10-10
  • C# WinForm實(shí)現(xiàn)窗體上控件自由拖動(dòng)功能示例

    C# WinForm實(shí)現(xiàn)窗體上控件自由拖動(dòng)功能示例

    這篇文章主要介紹了C# WinForm實(shí)現(xiàn)窗體上控件自由拖動(dòng)功能,涉及WinForm控件屬性及事件響應(yīng)相關(guān)操作技巧,需要的朋友可以參考下
    2017-07-07

最新評(píng)論

永寿县| 黑龙江省| 宁武县| 南投市| 萝北县| 武强县| 托克逊县| 云林县| 安岳县| 荥阳市| 綦江县| 平遥县| 自治县| 含山县| 开鲁县| 浦县| 开封县| 额敏县| 安福县| 陈巴尔虎旗| 和田市| 泗阳县| 仪陇县| 明水县| 桂阳县| 雷波县| 克山县| 长沙县| 陆良县| 井陉县| 灌南县| 海南省| 迭部县| 永和县| 砀山县| 惠州市| 忻城县| 吕梁市| 凤山市| 博野县| 衡水市|