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数据没有改变。
发表评论