C# app.config的配置方法及使用技巧
1.app.config配置文件
应用程序配置文件是标准的 XML 文件,XML 标记和属性是区分大小写的。
也是可以按需要更改的,对于一些在程序中需要使用的链接,地址,等常量,开发人员可以使用配置文件来设置,后期只用更改配置文件中的配置,而不必重编译应用程序。
配置文件的根节点是configuration。我们经常访问的是appSettings,它是由.Net预定义配置节,“配置节”可以理解为进行配置一个XML的节点。
我们在VS中创建一个新的桌面应用程序之后,在我们对应的解决方案视图会自动 生成一个名app.config 的配置文件,如果是web应用程序则会对应生成一个web.config的配置文件,为应用程序提供相应的配置。
当前app.config中为以xml文件,根节点为 configuration,内容如下所示
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>
2. appSettings的读写操作
.NET 提供了对appSettings节的访问方法。
在使用ConfigurationManager 之前我们需要引用命名空间
public class AppConfigAccess
{
private static Configuration config = System.Configuration.ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
/// <summary>
/// 获取指定节点的值
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public static string GetAppSetting(string key)
{
if (ConfigurationManager.AppSettings.AllKeys.Contains(key))
{
string value = config.AppSettings.Settings[key].Value;
return value;
}
else
{
return null;
}
}
/// <summary>
/// 增加一个appsetting节点
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
public static void AddAppSetting(string key, string value)
{
if (!ConfigurationManager.AppSettings.AllKeys.Contains(key))
{
//如果不 存在就增加一个节点
config.AppSettings.Settings.Add(key, value);
config.Save(ConfigurationSaveMode.Modified);
}
else
{
Console.WriteLine("当前节点已存在");
}
}
/// <summary>
/// 更新appsetting节点
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
public static void UpdateAppSettings(string key, string value)
{
if (ConfigurationManager.AppSettings.AllKeys.Contains(key))
{
//如果当前节点存在,则更新当前节点
config.AppSettings.Settings[key].Value = value;
config.Save(ConfigurationSaveMode.Modified);
}
else
{
Console.WriteLine("当前节点不存在");
}
}
/// <summary>
/// 删除appsetting节点
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
public static void DeleteAppSettings(string key, string value)
{
if (ConfigurationManager.AppSettings.AllKeys.Contains(key))
{
//如果当前节点存在,则删除当前节点
config.AppSettings.Settings.Remove(key);
config.Save(ConfigurationSaveMode.Modified);
}
else
{
Console.WriteLine("当前节点不存在");
}
}
}
在 .NET 1.0 和 1.1 版本中,可以使用 System.Configuration.ConfigurationSettings.AppSettings[“Key”] 来对 key = “Key” 的元素的 value属性 进行访问。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="DATETIME_EMP_INFO" value="2016-01-01 00:00:00" />
<add key="DATETIME_PER_INFO" value="2016-01-01 00:00:00" />
<add key="DATETIME_PER_INOUT" value="2016-01-01 00:00:00" />
<!--可访问子系统地址-->
<add key="url" value="http://***********:9000/sgism/workspace/main/index.jsp" />
<add key="servicePath" value="http://*********:8080/*******/services/Info" />
</appSettings>
</configuration>
注:现在.Net FrameWork 2.0中已经明确表示此ConfigurationSettings属性已经废弃,建议改为 ConfigurationManager 或 WebConfigurationManager。
3. connectingStrings的读写操作
ConnectionStrings最主要用于数据库连接,ip地址端口号等。
而AppSettings主要用于应用程中的一些配置信息。比如上传文件的路径,需要用到的可能会根据不同环境改变的一些常量等
<connectionStrings>
<add name="sbd" connectionString="Data Source=localhost;port=3306;Initial Catalog=sbd;uid=root;pwd=root;SslMode=none;" providerName="MySql.Data.MySqlClient" />
</connectionStrings>
class Program
{
static void Main(string[] args)
{
try
{
//设置ConnectionStrings 中指定节点的 字符串
ConfigurationManager.ConnectionStrings["sbd"].ConnectionString = "ata Source=localhost;port=3306;Initial Catalog=sbd;uid=root;pwd=root;SslMode=none;";
//获取ConnectionStrings 中指定节点的 字符串
string connection = ConfigurationManager.ConnectionStrings["sbd"].ToString();
//添加ConnectionStrings 节点
ConfigurationManager.ConnectionStrings.Add(new ConnectionStringSettings("sbd", "Data Source=localhost;port=3306;Initial Catalog=sbd;uid=root;pwd=root;SslMode=none;", "MySql.Data.MySqlClient"));
Console.WriteLine("运行完成");
}
catch
{
Console.WriteLine("运行失败");
}
Console.ReadKey();
}
}
在运行程序后都会在对应的bin/debug或者bin/Release 下生成下图的.config后缀的文件,在第一次运行时,会自动生成****.exe.config后缀的文件,将app.config中的xml文件属性全部复制在****.exe.config后缀的文件里,在程序运行过程中对配置文件的操作都在该文件中进行,并不直接对app.config文件进行修改。
以上纯属个人使用过程中遇到的问题,记个随便,供以后参考,仅代表个人,当前时间内的见解,如有问题,欢迎指正。