public static void CreateAppSettings()
{
System.Configuration.Configuration config =
ConfigurationManager.OpenExeConfiguration(
ConfigurationUserLevel.None);
string sectionName = "appSettings";
int appStgCnt =
ConfigurationManager.AppSettings.Count;
string newKey = "NewKey" + appStgCnt.ToString();
string newValue = DateTime.Now.ToLongDateString() +
" " + DateTime.Now.ToLongTimeString();
config.AppSettings.Settings.Add(newKey, newValue);
config.Save(ConfigurationSaveMode.Modified);
//msdn说:刷新命名节,这样在下次检索它时将从磁盘重新读取它。
//这是个静态方法,怎么能影响config的配置啊?
//所有的配置信息是在config对象里面啊?
ConfigurationManager.RefreshSection(sectionName);
AppSettingsSection appSettingSection =
(AppSettingsSection)config.GetSection(sectionName);
Console.WriteLine();
Console.WriteLine("Using GetSection(string).");
Console.WriteLine("AppSettings section XML:");
Console.WriteLine(
appSettingSection.SectionInformation.GetRawXml());
}ConfigurationManager.RefreshSection(sectionName);
这个是个静态方法,
{
System.Configuration.Configuration config =
ConfigurationManager.OpenExeConfiguration(
ConfigurationUserLevel.None);
string sectionName = "appSettings";
int appStgCnt =
ConfigurationManager.AppSettings.Count;
string newKey = "NewKey" + appStgCnt.ToString();
string newValue = DateTime.Now.ToLongDateString() +
" " + DateTime.Now.ToLongTimeString();
config.AppSettings.Settings.Add(newKey, newValue);
config.Save(ConfigurationSaveMode.Modified);
//msdn说:刷新命名节,这样在下次检索它时将从磁盘重新读取它。
//这是个静态方法,怎么能影响config的配置啊?
//所有的配置信息是在config对象里面啊?
ConfigurationManager.RefreshSection(sectionName);
AppSettingsSection appSettingSection =
(AppSettingsSection)config.GetSection(sectionName);
Console.WriteLine();
Console.WriteLine("Using GetSection(string).");
Console.WriteLine("AppSettings section XML:");
Console.WriteLine(
appSettingSection.SectionInformation.GetRawXml());
}ConfigurationManager.RefreshSection(sectionName);
这个是个静态方法,
如果程序已经运行,这时你修改了配置文件,就必须调用该方法以刷新到最新修改。
Console.WriteLine(
appSettingSection.SectionInformation.GetRawXml());得到的信息也是最新的啊?内容也随着:
config.AppSettings.Settings.Add(newKey, newValue);
改变而改变啊?
ConfigurationManager.RefreshSection(sectionName);
static Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
static void Main(string[] args)
{
GetAppSettings();
CreateAppSettings();
GetAppSettings();
Console.Read();
}
/// <summary>
/// 创建节点
/// </summary>
public static void CreateAppSettings()
{
int appStgCnt = ConfigurationManager.AppSettings.Count;
string newKey = "NewKey" + appStgCnt.ToString();
string newValue = DateTime.Now.ToLongDateString() + " " + DateTime.Now.ToLongTimeString();
config.AppSettings.Settings.Add(newKey, newValue);
config.Save(ConfigurationSaveMode.Modified);
//ConfigurationManager.RefreshSection("appSettings");
}
/// <summary>
/// 获得节点信息
/// </summary>
public static void GetAppSettings()
{
AppSettingsSection appSettingSection = (AppSettingsSection)config.GetSection("appSettings");
Console.WriteLine(appSettingSection.SectionInformation.GetRawXml());
}
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
得到的,因此无需添加
ConfigurationManager.RefreshSection(sectionName);
那个方法只对ConfigurationManager.AppSettings[""]这类静态属性有影响,直接通过OpenExeConfiguration方法打开的特殊对象不受影响。
换句话说,你那段代码是多余的。
就是,我把上面的代码换成
System.Configuration.Configuration config =
ConfigurationManager.OpenExeConfiguration(
ConfigurationUserLevel.PerUserRoaming);
保存时出错:
“不能编辑已锁定的 ConfigurationSection 属性。”
我在一个配置文件添加了几个固定的key,下次程序运行时,怎么修改这些key对应的value?
public void SetUi()
{
try
{
tbCn.Text = conf.AppSettings.Settings["tbCn"].Value;
tbCn1.Text = conf.AppSettings.Settings["tbCn1"].Value;
tbEn.Text = conf.AppSettings.Settings["tbEn"].Value;
tbEn1.Text = conf.AppSettings.Settings["tbEn1"].Value;
}
catch (Exception)
{
}
}
public void SaveUi()
{
try
{
//这里每次都要Clear一下,不然如果原先有这个key时,value就会以","添加并没有覆盖
AppSettings.Settings.Clear();
AppSettings.Settings.Add("tbCn", form.tbCn.Text);
AppSettings.Settings.Add("tbCn1", form.tbCn1.Text);
AppSettings.Settings.Add("tbEn", form.tbEn.Text);
AppSettings.Settings.Add("tbEn1", form.tbEn1.Text);
Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection(sectionName); }
catch (Exception)
{
}
}