Файл приложения app #config конфигурации C # ... как хранить коллекции? - PullRequest
7 голосов
/ 24 октября 2011

Я нахожусь в процессе написания сервиса с использованием C #, и мне нужно сохранить список строк в файле app.config .У меня их 161.

Как я могу сохранить эту информацию в файле app.config ?Должен быть способ, потому что это строго типизированные значения, и поэтому я должен легко использовать любой допустимый тип .NET в коде для доступа к ним!

Я хочу избежать использования одного значения, которое использует запятуюразделенный список для очевидных проблем с производительностью.

Ответы [ 3 ]

11 голосов
/ 24 октября 2011

Я использую Microsoft Visual Studio 2010.

  1. В Solution Explorer разверните узел Свойства вашего проекта.

  2. В Solution Explorer дважды щелкните файл .settings , в который вы хотите добавить новый параметр. Имя этого файла по умолчанию: Settings.settings .

  3. В Настройки конструктора , установите Имя , Тип , Область и Значение для вашей настройки. Каждая строка представляет одну настройку.

  4. Тип, который вам нужен, System.Collections.Specialized.StringCollection. Это можно найти после нажатия Обзор в конце DropDownList, который появляется, когда вы нажимаете для установки Тип .

  5. Нажмите на кнопку, которая появляется в конце Значение TextBox.

  6. Введите строки, один за другим, в появившемся диалоговом окне.

This is how it goes.

10 голосов
/ 24 октября 2011

Есть хорошая статья о хранении списков (или любого другого пользовательского объекта) в ваших файлах 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>
0 голосов
/ 12 мая 2015

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

StringCollection НЕ рекомендуется в VS2015RC для раздражения при загрузке диалогового окна настроек свойств для проекта и повторного сохранения данных.Если у вас есть дюжина записей для serializeAs = "Xml", и каждый раз, когда вы открываете окно свойств, оно будет всплывать с диалоговым окном для КАЖДОЙ записи, предлагающим вам подтвердить перезапись.Да / Нет абсолютно ничего не делает.

Несоответствие данных для каждого файла отключит его и является известной проблемой.См. Мой другой пост, связанный.

Я бы проголосовал против вас за использование VS2010 и предложение как таковое, но мне не хватает представителя, и оно также сохраняется в VS2015RC.

ИспользуйтеОбходной путь, такой как хранилище Custom Config, или найдите способ оставить свои коллекции вне дизайнера или app.config.Один или другой.

Жизнеспособное решение только для тех, кто готов мириться с придирчивыми диалоговыми окнами или редко редактировать информацию о свойствах настроек.

Вы бы порекомендовали nagiences nakiences для производства или выпуска вкакой-то коммерческий проект?: P

...