1 在c#下自定义配置
1.1 配置文件下的配置 app.config不能更改名字
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="dcsConfig" type="ConfigTest.Conf.DCSSection,ConfigTest"/>
</configSections>
<dcsConfig writeExceptionLog="1" maxConnectionNum="65535" buffSize="4024" reSendTimes="2" heartRate="1" socketOverTime="3">
<gateway>
<add name="dcsGW" domainName="www.abc.com" port="19100" protocolType="1"></add>
</gateway>
</dcsConfig>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>
1.2 定义元素。集合类
class DCSSection : ConfigurationSection { public DCSSection() { } public DCSSection(string name) { Name = name; } [ConfigurationProperty("name")] public string Name { get { return this["name"].ToString(); } set { this["name"] = value; } } /// <summary> /// 网关配置. /// </summary> [ConfigurationProperty("gateway")] public GateWayCollection GateWays { get { return (GateWayCollection)base["gateway"]; } set { base["gateway"] = value; } } /// <summary> /// 写异常日志开关. /// </summary> /// <remarks>1 写日志 0 不写日志</remarks> [ConfigurationProperty("writeExceptionLog")] public int WriteExceptionLog { get { return (int)this["writeExceptionLog"]; } set { this["writeLog"] = value; } } /// <summary> /// 最大连接 /// </summary> /// <value>最大连接数.</value> [ConfigurationProperty("maxConnectionNum")] public int MaxConnectionNum { get { return (int)this["maxConnectionNum"]; } set { this["maxConnectionNum"] = value; } } /// <summary> /// 链路超时时间(单位min). /// </summary> [ConfigurationProperty("socketOverTime")] public int SocketOverTime { get { return (int)this["socketOverTime"]; } set { this["socketOverTime"] = value; } } /// <summary> /// 心跳频率(检测链路频率 单位s) /// </summary> [ConfigurationProperty("heartRate")] public int HeartRate { get { return (int)this["heartRate"]; } set { this["heartRate"] = value; } } /// <summary> /// 接收或发送缓存区大小(单位B ). /// </summary> [ConfigurationProperty("buffSize")] public int BuffSize { get { return (int)this["buffSize"]; } set { this["buffSize"] = value; } } /// <summary> /// 重传次数. /// </summary> [ConfigurationProperty("reSendTimes")] public int ReSendTimes { get { return (int)this["reSendTimes"]; } set { this["reSendTimes"] = value; } } internal static DCSSection GetConfigSection() { System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); //取得自定义配置区. DCSSection mySection = config.GetSection("dcsConfig") as DCSSection; return mySection; } }
1.3
public class GateWayElement:ConfigurationElement
{
public GateWayElement()
{
}
/// <summary>
/// 名称.
/// </summary>
[ConfigurationProperty("name")]
public string Name
{
get
{
return (string)this["name"];
}
set
{
this["name"] = value;
}
}
/// <summary>
/// IP.
/// </summary>
/// <value></value>
[ConfigurationProperty("domainName")]
public string DomainName
{
get
{
return (string)base["domainName"];
}
set
{
base["domainName"] = value;
}
}
/// <summary>
/// port.
/// </summary>
/// <value>.</value>
[ConfigurationProperty("port")]
public int Port
{
get
{
return (int)this["port"];
}
set
{
this["port"] = value;
}
}
/// <summary>
/// 通信协议类型(TCP=1、UDP=2、TCP(SSL)=3)
/// </summary>
/// <value>.</value>
[ConfigurationProperty("protocolType")]
public int ProtocolType
{
get
{
return (int)this["protocolType"];
}
set
{
this["protocolType"] = value;
}
}
}
1.4
class GateWayCollection : ConfigurationElementCollection
{
public override ConfigurationElementCollectionType CollectionType
{
get
{
return ConfigurationElementCollectionType.AddRemoveClearMap;
}
}
protected override ConfigurationElement CreateNewElement()
{
return new GateWayElement();
}
protected override Object GetElementKey(ConfigurationElement element)
{
return ((GateWayElement)element).Name;
}
public GateWayElement this[int index]
{
get
{
return (GateWayElement)BaseGet(index);
}
set
{
if (BaseGet(index) != null)
{
BaseRemoveAt(index);
}
BaseAdd(index, value);
}
}
new public GateWayElement this[string Name]
{
get
{
return (GateWayElement)BaseGet(Name);
}
}
public int IndexOf(GateWayElement url)
{
return BaseIndexOf(url);
}
public void Add(GateWayElement url)
{
BaseAdd(url);
}
protected override void BaseAdd(ConfigurationElement element)
{
BaseAdd(element, false);
}
public void Remove(GateWayElement url)
{
if (BaseIndexOf(url) >= 0)
BaseRemove(url.Name);
}
public void RemoveAt(int index)
{
BaseRemoveAt(index);
}
public void Remove(string name)
{
BaseRemove(name);
}
public void Clear()
{
BaseClear();
}
}
1.4 调用
DCSSection var = DCSSection.GetConfigSection();
int a = var.HeartRate;
GateWayCollection list = var.GateWays;
foreach (GateWayElement item in list)
{
if (item.Name.ToLower().Trim() == "dcsgw")
{
MessageBox.Show(item.Port.ToString());
}
else if (item.Name.ToLower().Trim() == "domainName")
{
}
}
2 .net下的自定义配置
其他都一样有点不一样
//当不在独立 exe 内部运行时,必须指定 exePath。
internal static DCSSection GetConfigSection()
{
//System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
string exePath = AppDomain.CurrentDomain.BaseDirectory + "Web.config";
System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(exePath);
//取得自定义配置区.
DCSSection mySection = config.GetSection("dcsConfig") as DCSSection;
return mySection;
}
}
}
// 可以建立个文件web.config.config,作为web.config的副本。
// 再次执行
// Configuration cfg = ConfigurationManager.OpenExeConfiguration(Server.MapPath("web.config"));
//cfg.AppSettings.Settings.Remove("123");
//cfg.AppSettings.Settings.Add("123","asdasd");
//Response.Write(cfg.FilePath);
//cfg.SaveAs(Server.MapPath("web.config"));
所以在在web.conf 下面在添加一个他的副本 web.config.config就可以读取了,(无奈之举)