Как вы используете разделы в c # 4.0 app.config?

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

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

Ниже приведен пример того, как будет выглядеть мой app.config:

  <configSections>
    <section name="FBI" type="" />
    <section name="FSCS" type="" />
  </configSections>

  <FSCS>
    <add key="processingDirectory" value="C:\testfiles\ProccesFolder"/>
  </FSCS>
  <FBI>
    <add key="processingDirectory" value="C:\testfiles\ProccesFolder"/>
  </FBI>

Обновлять:

Продвинутое решение на основе ответа. на случай, если кто-то захочет узнать.

App.config:

<configuration>
    <configSections>
        <sectionGroup name="FileCheckerConfigGroup">
          <section name="FBI" type="System.Configuration.NameValueSectionHandler" />
          <section name="FSCS" type="System.Configuration.NameValueSectionHandler" />
        </sectionGroup>
    </configSections>
    <FileCheckerConfigGroup>
        <FSCS>
            <add key="processingDirectory" value="C:\testfiles\ProccesFolder"/>
        </FSCS>
        <FBI>
            <add key="processingDirectory" value="C:\testfiles\ProccesFolder"/>
        </FBI>
    </FileCheckerConfigGroup>
</configuration>

Код:

// Get the application configuration file. 
System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

// Get the collection of the section groups. 
ConfigurationSectionGroupCollection sectionGroups = config.SectionGroups;

foreach (ConfigurationSectionGroup sectionGroup in sectionGroups)
{
    if (sectionGroup.Name == "FileCheckerConfigGroup")
    {
        foreach (ConfigurationSection configurationSection in sectionGroup.Sections)
        {
          var section = ConfigurationManager.GetSection(configurationSection.SectionInformation.SectionName) as NameValueCollection;
          inputDirectory = section["inputDirectory"]; //"C:\\testfiles";
        }
    }
}

person Andy    schedule 12.01.2011    source источник
comment
Как вы узнаете, данные какой компании использовать? Вот как вы узнаете, что являетесь пользователем ФБР?   -  person DOK    schedule 12.01.2011
comment
после установки входного каталога появится способ сделать что-то для этой компании.   -  person Andy    schedule 13.01.2011


Ответы (2)


<configSections>
  <section name="FBI" type="System.Configuration.NameValueSectionHandler" />
  <section name="FSCS" type="System.Configuration.NameValueSectionHandler" />
</configSections>

<FSCS>
  <add key="processingDirectory" value="C:\testfiles\ProccesFolder"/>
</FSCS>
<FBI>
  <add key="processingDirectory" value="C:\testfiles\ProccesFolder"/>
</FBI>

А потом:

var section = ConfigurationManager.GetSection("FSCS") as NameValueCollection;
var value = section["processingDirectory"];
person Darin Dimitrov    schedule 12.01.2011
comment
отлично. знаете ли вы, как получить все разные разделы из конфигурации приложения из кода? - person Andy; 12.01.2011
comment
Примечание. Если вы используете sectionGroups, группа добавляется к разделам получения как путь, то есть ConfigurationManager.GetSection (GroupName / FSCS) как NameValueCollection; - person Andy; 15.08.2011
comment
в .net версии выше 2.0 вы должны использовать type="System.Configuration.AppSettingsSection" - person rock_walker; 16.01.2018

App.config

<configSections>
  <sectionGroup name="FileCheckers">
    <section name="FBI" type="System.Configuration.NameValueSectionHandler" />
    <section name="FSCS" type="System.Configuration.NameValueSectionHandler" />
  </sectionGroup>
</configSections>

<FileCheckers>
  <FSCS>
    <add key="processingDirectory" value="C:\testfiles\ProccesFolder"/>
  </FSCS>
  <FBI>
    <add key="processingDirectory" value="C:\testfiles\ProccesFolder"/>
  </FBI>
</FileCheckers>

Пример использования

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
ConfigurationSectionGroup fileCheckersGroup = config.SectionGroups["FileCheckers"];
foreach (ConfigurationSection section in fileCheckersGroup.Sections)
{
    NameValueCollection sectionSettings = ConfigurationManager.GetSection(section.SectionInformation.SectionName) as NameValueCollection;
    var value = sectionSettings["processingDirectory"]
}
person user1387916    schedule 23.05.2014
comment
Пожалуйста, дайте объяснение в дополнение к коду. - person Matthijs Wessels; 19.09.2014
comment
+1 за то, что не используются только определения var. Это помогает понять, как это работает и какие типы вы используете. - person EAmez; 28.03.2017
comment
Для будущих веб-поисковиков я создал настраиваемую группу ConfigSectionGroup путем создания подклассов - это кажется неправильным, поскольку этот код пытался загрузить класс из пространства имен .NET Configuration, что приводило к исключению TypeLoadException. После дальнейшего изучения кода это кажется ненужным. - person ryanwebjackson; 06.09.2018
comment
Если вы получили исключение TypeInitializationException, убедитесь, что элемент configSections является первым дочерним элементом элемента конфигурации. Их тоже должен быть только один. - person FunksMaName; 16.01.2019