Подтвердить что ты не робот

Sub appsettings в appsetting node С#

Я использую файл app.config, созданный с помощью консольного приложения, и я могу прочитать val1 ключа1, используя ConfigurationSettings.AppSettings["key1"].ToString()

<startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />  </startup> `

<add key="key1" value="val1" />
<add key="key2" value="val2" />

</appSettings> </configuration>

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

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

Показывает все узлы и не может прочитать node без получения всех узлов

например, что я хочу сделать:

<appSettings>
<Section1>
     <add key="key1" value="val1" />
</Section1>
<Section2>
     <add key="key1" value="val1" />
<Section2>
</appSettings>

и если есть способ получить к нему доступ, используя ConfigurationSettings.AppSettings["Section1"].["key1"].ToString()

4b9b3361

Ответ 1

Вы можете добавлять пользовательские разделы в app.config без написания дополнительного кода. Все, что вам нужно сделать, это "объявление" нового раздела в configSections node как это

<configSections>
      <section name="genericAppSettings" type="System.Configuration.AppSettingsSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  </configSections>

а затем вы можете определить этот раздел, заполняя его ключами и значениями:

  <genericAppSettings>
      <add key="testkey" value="generic" />
      <add key="another" value="testvalue" />
  </genericAppSettings>

Чтобы получить значение ключа из этого раздела, вы должны добавить System.Configuration dll в качестве ссылки на ваш проект, добавить using и использовать метод GetSection. Пример:

using System.Collections.Specialized;
using System.Configuration;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            NameValueCollection test = (NameValueCollection)ConfigurationManager.GetSection("genericAppSettings");

            string a = test["another"];
        }
    }
}

Приятно, что вы можете легко создавать группы разделов, если вам это нужно:

<configSections>
    <sectionGroup name="customAppSettingsGroup">
      <section name="genericAppSettings" type="System.Configuration.AppSettingsSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
 // another sections
    </sectionGroup>
</configSections>

  <customAppSettingsGroup>
    <genericAppSettings>
      <add key="testkey" value="generic" />
      <add key="another" value="testvalue" />
    </genericAppSettings>
    // another sections
  </customAppSettingsGroup>

Если вы используете группы, для доступа к разделам вы должны получить к ним доступ с помощью формата {group name}/{section name}:

NameValueCollection test = (NameValueCollection)ConfigurationManager.GetSection("customAppSettingsGroup/genericAppSettings");

Ответ 2

AFAIK вы можете реализовать пользовательский раздел за пределами настроек приложения. Например, такие среды, как Autofac и SpecFlow, используют эти типы сеансов для поддержки собственной схемы конфигурации. Вы можете взглянуть на эту статью MSDN, чтобы понять, как это сделать. Надеюсь, что это поможет.