appsettings标签主要用于应用程中的一些配置信息。比如上传文件的路径,需要用到的可能会根据不同环境改变的一些常量等。可以在配置文件添加可执行文件要的配置。
using system; using system.collections.generic; using system.configuration; class program { static void main(string[] args) { string valstr; string bl; bl =readappsettings("setting1",out valstr); if (bl == "true") console.writeline("setting1值:{0}", valstr); else console.writeline("错误:" + bl); bl = readappsettings("setting2", out valstr); if (bl == "true") console.writeline("setting2值:{0}", valstr); else console.writeline("错误:" + bl); bl = addupdateappsettings("newsetting", "may 7, 2014"); if (bl == "true") console.writeline("添加标签成功。"); else console.writeline("错误:" + bl); bl = addupdateappsettings("setting1", "may 8, 2014"); if (bl == "true") console.writeline("修改标签成功。"); else console.writeline("错误:" + bl); list<(string, string)> list; bl = readallappsettings(out list); if (bl == "true") foreach (var val in list) { console.writeline("键:{0}, 值:{1},", val.item1, val.item2); } else console.writeline("错误:" + bl); console.readkey(); } /// <summary> /// appsettings标签读取全部值 /// </summary> /// <param name="values">返回list<(string, string)>格式数据,使用out关键字。</param> /// <returns>成功返回字符串“true”,失败返回原因。</returns> public static string readallappsettings(out list<(string, string)> values) { values = null; try { var appsettings = configurationmanager.appsettings; if (appsettings.count == 0) { return "无appsettings标签。"; } values = new list<(string, string)>(); foreach (var key in appsettings.allkeys) { values.add((key, appsettings[key])); } return "true"; } catch (configurationerrorsexception err) { return err.message; } } /// <summary> /// appsettings标签读取指定值 /// </summary> /// <param name="key">指定键</param> /// <param name="val">输出值,使用out关键字</param> /// <returns>成功返回字符串“true”,失败返回原因。</returns> public static string readappsettings(string key, out string val) { val = null; try { var appsettings = configurationmanager.appsettings; val = appsettings[key]; if (val == null) return (key + "键值为空。"); if (val == "") return (key + "键值为空。"); return "true"; } catch (configurationerrorsexception err) { return err.message; } } /// <summary> /// appsettings标签写入或更新配置数据 /// </summary> /// <param name="key">键</param> /// <param name="value">值</param> /// <returns>成功返回字符串“true”,失败返回原因。</returns> public static string addupdateappsettings(string key, string value) { try { var configfile = configurationmanager.openexeconfiguration(configurationuserlevel.none); var settings = configfile.appsettings.settings; if (settings[key] == null) settings.add(key, value); else settings[key].value = value; configfile.save(configurationsavemode.modified); configurationmanager.refreshsection(configfile.appsettings.sectioninformation.name); return "true"; } catch (configurationerrorsexception err) { return err.message; } } }
第一次程序运行结果。
setting1值:not found setting1值:not found 键:newsetting, 值:may 7, 2014, 键:setting1, 值:may 8, 2014,
第一次程序运行后,consoleapp1.exe.config数据,会创建<appsettings>标签,数据保存到标签内。
<?xml version="1.0" encoding="utf-8" ?> <configuration> <appsettings> <add key="newsetting" value="may 7, 2014" /> <add key="setting1" value="may 8, 2014" /> </appsettings> <startup> <supportedruntime version="v4.0" sku=".netframework,version=v4.7.2" /> </startup> </configuration>
第二次程序运行结果。
setting1值:may 8, 2014 setting1值:not found 键:newsetting, 值:may 7, 2014, 键:setting1, 值:may 8, 2014,
consoleapp1.exe.config数据没有改变。
发表评论