在.Net 3.5(Windows)服务中,我想在配置文件中存储一小部分值。基本上,我需要允许管理员在这个小集合中添加和删除值。我需要在配置文件中添加什么来存储小值的集合,如何在C#中读取集合?
为了澄清,我正在寻找的收藏品是这样的数据:
<Illegal Characters>
<CustomCollection value="?"/>
<CustomCollection value="#"/>
<CustomCollection value=","/>
</Illegal Characters>
答案 0 :(得分:3)
有一篇关于创建自定义配置节处理程序的文章,该处理程序将值作为列表here加载。
基本上你的IConfigurationSectionHandler
的Create方法应该是这样的:
public object Create(object parent, object configContext, XmlNode section)
{
IList<string> illegal = new List<string>();
XmlNodeList processesNodes= section.SelectNodes("CustomCollection");
foreach (XmlNode child in processesNodes)
{
illegal.Add(child.Attributes["value"].InnerText);
}
return illegal;
}
答案 1 :(得分:2)
作为替代方案,您可以将一个非法字符串存储为配置文件中的正则表达式。这样您就不必遍历字符来检查它们是否在给定字符串中使用 - 您可以根据正则表达式进行比较。可能会节省一些CPU和复杂性。
当然,如果管理员要直接编辑文件,则使用单个XML节点会更容易。但如果他们通过应用程序本身更改字符列表,则正则表达式可能会很好。
答案 2 :(得分:1)
如果值的数量很小并且与它们关联的名称是固定的,您应该能够将它们存储在appSettings配置部分中,并使用ConfigurationManager。AppSettings集合引用它们。这对于标准键值对非常有效。如果您的数据比这更复杂,您可能需要定义自己的配置部分和关联的ConfigurationSectionHandler,以将数据解析为您想要的任何自定义对象。您可能还希望实现FileSystemWatcher来检测配置文件的更改并更新正在运行的应用程序的配置,除非启动/停止服务以便应用新配置是可接受的。
答案 3 :(得分:0)
我将在VB.NET中描述这种方式,因为我确信在某些情况下C#方式非常相似或相同。在解决方案资源管理器中打开My Project下的settings.settings文件。添加所需的设置,例如“OutputPath”。然后,在代码中,用
引用它variable = My.Settings.OutputPath
' If a user modifiable setting, you can use:
My.Settings.OutputPath = variable
My.Settings.Save()