将一组值存储在配置文件中

时间:2009-03-31 17:56:49

标签: .net collections config

在.Net 3.5(Windows)服务中,我想在配置文件中存储一小部分值。基本上,我需要允许管理员在这个小集合中添加和删除值。我需要在配置文件中添加什么来存储小值的集合,如何在C#中读取集合?

为了澄清,我正在寻找的收藏品是这样的数据:

<Illegal Characters>
  <CustomCollection value="?"/>
  <CustomCollection value="#"/>
  <CustomCollection value=","/>
</Illegal Characters>

4 个答案:

答案 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()