關于C# App.config 自定義配置節的文章,網上搜了好多,感覺自已應該明白差不多了,但卻碰到一個問題:一般來說,配置節的訪問應該有讀寫兩部分呀,但我在網上搜了半天,只查到了如何去讀,沒有查到如何去寫。
如例:
一、在appconfig中增加了自配置節點MySettings
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="MySettings" type="System.Configuration.DictionarySectionHandler" />
</configSections>
<MySettings>
<add key="AveMod" value="https://bbs.csdn.net/topics/0" />
<add key="LasterInfo" value="https://bbs.csdn.net/topics/0" />
</MySettings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
</startup>
<appSettings>
<add key="DataBase" value="https://bbs.csdn.net/topics/sss" />
</appSettings>
<system.web>
<membership defaultProvider="ClientAuthenticationMembershipProvider">
<providers>
<add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" />
</providers>
</membership>
<roleManager defaultProvider="ClientRoleProvider" enabled="true">
<providers>
<add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400" />
</providers>
</roleManager>
</system.web>
</configuration>
二、新建了一個管理類(求提示處關鍵代碼)
public static class MySettingsManager
{
static IDictionary MySectionDic = (IDictionary)ConfigurationManager.GetSection("MySettings");
public static string GetValue(string key)
{
return MySectionDic[key].ToString();
}
/// <summary>
/// //修改鍵值
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
public static void SetValue(string key, string value)
{
//如果存在洗掉
if (MySectionDic.Contains(key)) { MySectionDic.Remove(key); }
MySectionDic.Add(key, value);
MySectionDic[key] = value;
// WaterQuSection.Save(ConfigurationSaveMode.Modified);//這句想當然的代碼應是關鍵代碼,求指點。
ConfigurationManager.RefreshSection("MySettings");
}
public static bool KeyExists(string strKey)
{
foreach (string str in MySectionDic.Keys)
{
if (str == strKey)
{
return true;
}
}
return false;
}
}
三、Demo除錯:
第一次彈出結果0,第二次彈出結果2,這沒問題;
但這時我打開Appconfig查看,里面AveMod的Value還是0,這就有問題了;
然后再次運行,這時第一次彈出結果仍是0,第二次彈出結果2,這就有問題了;
static void Main(string[] args)
{ string DataBaseInfo = MySettingsManager.GetValue("AveMod") ;
MessageBox.Show(DataBaseInfo);
MySettingsManager.SetValue("AveMod", "2");
DataBaseInfo = MySettingsManager.GetValue("AveMod");
MessageBox.Show(DataBaseInfo);
}
請明白人指點下,給個路子...
uj5u.com熱心網友回復:
寫必須要保存否則只是寫到記憶體里面
RefreshSection只是從檔案中重繪
https://blog.csdn.net/liuhhaiffeng/article/details/52584468
uj5u.com熱心網友回復:
對,對,我問的就是如何保存呢
WaterQuSection是IDictionary型別的,里面沒有Save方法呢
uj5u.com熱心網友回復:
看別人的代碼
先要打開一個Configuration 這個才有Save
uj5u.com熱心網友回復:
寫就按XML去寫就完了啊轉載請註明出處,本文鏈接:https://www.uj5u.com/net/128639.html
標籤:C#
上一篇:編程讀取Word檔案
