我的控制台应用程序中有一系列规则要在app.config中打开和关闭。
App.config支持键值对,所以很好的时候 - 我可以简单地定义一些规则键并将标志存储在值中。
我现在想添加一个我可以阅读的定制评论字段来获取规则说明。但是,似乎没有任何设施可以做到这一点。
显然,我可以滚动自己的配置文件并使用标准XML方法读取它,但我认为必须有更好的方法在app.config文件中执行此操作。
我还可以在键/值中包含注释,但这似乎也不能令人满意。
有什么想法吗?
答案 0 :(得分:4)
好的,按照Pavel的初始线索和我得到的一些代码here,我设法产生以下内容。希望它对其他疲惫的旅行者有用! : - )
<强>的App.config 强>
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="RuleSet" type="ExtendedKVP.RuleSection, ExtendedKVP" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<RuleSet>
<TheRules>
<add ruleId="RL101" ruleActive="true" ruleDesc="Don't do this" />
<add ruleId="RL202" ruleActive="false" ruleDesc="Avoid that" />
<add ruleId="RL303" ruleActive="true" ruleDesc="Missing the other" />
</TheRules>
</RuleSet>
</configuration>
<强> Program.cs的强>
using System;
using System.Configuration;
namespace ExtendedKVP
{
class Program
{
static void Main(string[] args)
{
var connectionManagerDataSection = ConfigurationManager.GetSection(RuleSection.SectionName) as RuleSection;
if (connectionManagerDataSection != null)
{
foreach (RuleElement element in connectionManagerDataSection.ConnectionManagerEndpoints)
{
Console.WriteLine(string.Format("RuleId: {0}, RuleActive: {1}, RuleDesc: {2}", element.RuleId, element.RuleActive, element.RuleDesc));
}
}
}
}
}
<强> ConfigReader.cs 强>
using System.Configuration;
namespace ExtendedKVP
{
public class RuleSection : ConfigurationSection
{
public const string SectionName = "RuleSet";
private const string RuleCollectionName = "TheRules";
[ConfigurationProperty(RuleCollectionName)]
[ConfigurationCollection(typeof(RuleCollection), AddItemName = "add")]
public RuleCollection ConnectionManagerEndpoints { get { return (RuleCollection)base[RuleCollectionName]; } }
}
public class RuleCollection : ConfigurationElementCollection
{
protected override ConfigurationElement CreateNewElement()
{
return new RuleElement();
}
protected override object GetElementKey(ConfigurationElement element)
{
return ((RuleElement)element).RuleId;
}
}
public class RuleElement : ConfigurationElement
{
[ConfigurationProperty("ruleId", IsRequired = true)]
public string RuleId
{
get { return (string)this["ruleId"]; }
set { this["ruleId"] = value; }
}
[ConfigurationProperty("ruleDesc", IsRequired = true)]
public string RuleDesc
{
get { return (string)this["ruleDesc"]; }
set { this["ruleDesc"] = value; }
}
[ConfigurationProperty("ruleActive", IsRequired = false, DefaultValue = false)]
public bool RuleActive
{
get { return (bool)this["ruleActive"]; }
set { this["ruleActive"] = value; }
}
}
}
答案 1 :(得分:2)
您可以在app.config中创建自己的配置部分,并将其用于自定义设置。
点击here了解详情。