前言 :
我们在撰写自定义 Configuration时,会先定义好对应的自定义 ConfigurationSection 与 Config档让程序代码知道该如何颇析数据。
<sample propertyA="Clark001"> <propertyCollectionB> <add name="Clark002" value="Clark003" /> </propertyCollectionB> </sample>
public class SampleSection : ConfigurationSection { [ConfigurationProperty("propertyA")] public string PropertyA { get { return (string)base["propertyA"]; } set { base["propertyA"] = value; } } [ConfigurationProperty("propertyCollectionB")] public NameValueConfigurationCollection PropertyCollectionB { get { return (NameValueConfigurationCollection)base["propertyCollectionB"]; } } }
但是当我们的 Config档为下列XML,其中 propertyC的 Attribute是不固定数量与名称的时候。
上列的实作方法无法满足这样的需求。
<sample propertyA="Clark001"> <propertyCollectionB> <add name="Clark002" value="Clark003" /> </propertyCollectionB> <propertyC A="Clark004" B="Clark005" /> </sample>
本篇文章描述,如何使用程序代码来完成这样的需求。
注意 :
在 Microsoft Visual Studio IDE除错环境下,执行程序写入.config时。
程序写入的将会是*.vshost.exe.config,而不是预期中的 *.exe.config。
并且程序执行结束之后,IDE会覆盖*.vshost.exe.config成为写入前的状态。
因此会误认为程序执行失败。
只要编译完毕之后,
点选bin目录底下的*.exe,再去检查*.exe.config,就可以看到预期中的结果。
相关资料 :
[ASP.NET]撰写自己的 Configuration 区段 Part 1 : http://www.dotblogs.com.tw/regionbbs/archive/2009/05/08/custom_configuration_section_in_web_config.aspx
[ASP.NET]撰写自己的 Configuration 区段 Part 2 : http://www.dotblogs.com.tw/regionbbs/archive/2009/09/17/orgainzeyoursectionintogroupforconfiguration.aspx
[ASP.NET]撰写自己的 Configuration 区段 Part 3 : http://www.dotblogs.com.tw/regionbbs/archive/2009/10/09/customconfigurationelementcollection.aspx
[.NET] : 自定义Configuration区段的资料写入 : http://www.dotblogs.com.tw/clark/archive/2010/12/23/20338.aspx
实作 :
档案下载 : Clk.ConfigurationSample2.zip
项目加入或引用 UnrecognizedAttributeConfigurationElement、UnrecognizedAttributeDictionary
后记 :
自定义Configuration区段,使用UnrecognizedAttributeConfigurationElement、UnrecognizedAttributeDictionary。
来做未定义的Attribute读取跟写入,其实蛮方便的 :D。