C#的应用程序配置“app.config”文件...如何存储集合?

时间:2011-10-24 07:29:04

标签: c# app-config

我正在使用C#编写服务,我需要在 app.config 文件中存储字符串列表。我有161个。

如何将此信息存储在 app.config 文件中?必须有一种方法,因为这些是强类型值,因此我应该在代码中轻松使用任何有效的.NET类型来访问它们!

我想避免使用一个使用逗号分隔列表的值来解决明显的性能问题。

3 个答案:

答案 0 :(得分:11)

我使用Microsoft的Visual Studio 2010。

  1. 解决方案资源管理器中,展开项目的属性节点。

  2. 解决方案资源管理器中,双击要添加新设置的 .settings 文件。此文件的默认名称为 Settings.settings

  3. 设置设计器中,设置名称类型范围设置的值。每行代表一个设置。

  4. 您需要的类型是System.Collections.Specialized.StringCollection。这可以在点击设置类型后出现的DropDownList末尾点击浏览后找到。

  5. 点击文本框末尾显示的按钮。

  6. 在出现的对话框中逐个输入字符串。

  7. This is how it goes.

答案 1 :(得分:10)

有一篇关于在Best Way Of Saving Lists in App.Config

中的app.config文件中存储列表(或任何自定义对象)的文章很好

基本上,您创建一个表示数据的对象。

public class MyConfig
{
    public string[] myList;
    public string someOtherValueIfYouWant;
}

为它编写一个配置处理程序......

public class ConfigSectionHandler : IConfigurationSectionHandler
{
    public const string SECTION_NAME = "MyConfig";
    public object Create(object parent, object configContext, XmlNode section)
    {
        string szConfig = section.SelectSingleNode("//MyConfig").OuterXml;
        MyConfig retConf = null;

        if (szConfig != string.Empty || szConfig != null)
        {
            XmlSerializer xsw = new XmlSerializer(typeof(MyConfig));
            MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(szConfig));
            ms.Position = 0;
            retConf = (MyConfig)xsw.DeSerialize(ms);
        }
        return retConf;
    }

}

这允许您将以下XML放在app.config文件中......

告诉app.config你的酷配置部分

<configSections>
    <section name="MyConfig" type="ConfigSectionHandler,someAssembly" />
</configSection>

然后添加您的配置部分...

<MyConfig>
    <myList>First one</myList>
    <myList>Second one</myList>
    <myList>Keep going</myList>
    <myList>And so on</myList>
    <someOtherValueIfYouWant>some non array config</someOtherValueIfYouWant>
</MyConfig>

答案 2 :(得分:-3)

https://stackoverflow.com/a/30178144/878539

在VS2015RC中建议使用StringCollection NOT ,以便在加载项目的属性设置对话框窗口并重新保存数据时产生烦恼。如果serializeAs =“Xml”有十几个条目,每次打开属性窗口时,它都会弹出一个EACH条目对话框,告诉你确认覆盖。是/否绝对没有。

每个文件的数据不匹配都会将其设置为关闭,这是一个已知问题。请参阅我的其他相关帖子。

我会拒绝你投票使用VS2010,并建议如此,但我没有足够的代表,它也会继续通过VS2015RC。

使用自定义配置存储等变通方法或找到一种方法将您的集合从设计器或app.config中删除。一个或另一个。

仅适用于那些愿意忍受唠叨对话框窗口或很少编辑设置属性信息的人。

你会推荐唠叨屏幕的核心用于制作或发布到任何类型的商业项目吗? :P