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

4
在 .Net 3.5 (Windows) 服务中,我想要在配置文件中存储一小组值。基本上,我需要允许管理员添加和删除这个小组的值。我需要在配置文件中添加什么来存储这个小组的值,以及如何在 C# 中读取这个小组?
为了澄清,我需要的这个小组的数据如下:
<Illegal Characters>
  <CustomCollection value="?"/>
  <CustomCollection value="#"/>
  <CustomCollection value=","/>
</Illegal Characters>
4个回答

3
这里有一篇关于创建自定义配置节处理程序的好文章,它将值作为列表加载。链接在这里:http://www.dotneat.net/2007/10/16/StoringACollectionOnYourAppconfigUsingSectionHandlers.aspx
基本上你的的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;
}

2
作为一种替代方案,您可以将一个非法字符的字符串作为正则表达式存储在配置文件中。这样,您就不必迭代字符来检查它们是否在给定字符串中使用-您可以基于正则表达式进行比较。这可能会节省一些CPU和复杂性。
当然,如果管理员直接编辑文件,则更容易使用单个XML节点。但是,如果他们通过应用程序更改字符列表,则正则表达式可能很有用。

1
如果值的数量很少且与之相关联的名称是固定的,您应该能够将它们存储在appSettings配置部分中,并使用ConfigurationManager.AppSettings集合引用它们。这对于标准键值对非常有效。如果您的数据比这更复杂,您可能需要定义自己的配置部分和相关的ConfigurationSectionHandler来将数据解析为任何自定义对象。您还可能需要实现一个FileSystemWatcher来检测配置文件的更改并更新正在运行的应用程序的配置,除非可以接受启动/停止服务以获取新配置。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接