хранение иерархических настроек приложения в web.config или app.config - PullRequest
8 голосов
/ 04 января 2012

Мне нужно сохранить настройки конфигурации моего приложения в иерархическом формате в web.config или app.config. Это возможно? или я должен хранить его в каком-то XML-файле или базе данных и использовать вместо этого? Мне не хватает формата пары простых имен.

    <appSettings>
        <Report1>
          <add key="SourceFilePath" value="value1" />
          <add key="DestinationFolderPath" value="value2" />
        </Report1>
        <Report2>
          <add key="SourceFilePath" value="value1" />
          <add key="DestinationFolderPath" value="value2" />
        </Report2>
   </appSettings>

Это веб-приложение для составления отчетов, и мне нужно хранить пути к файлам для исходных файлов, пакетов служб SSIS, подробностей FTP-сервера и т. Д.

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

Ответы [ 4 ]

6 голосов
/ 04 января 2012

Вы не можете добавлять пользовательские элементы в appSettings.

. Лучший способ создать собственный формат - написать собственный класс ConfigurationSettings и использовать его в конфигурации.

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

См. Как: создавать пользовательские разделы конфигурации с помощью ConfigurationSection в MSDN.

3 голосов
/ 10 февраля 2012

Вы не можете хранить элементы XML так, как вы предлагали в настройках приложения.Если вам нужна иерархия, как вы упомянули, попробуйте один из следующих подходов

  1. Сохранение целых элементов xml в настройках приложения для анализа xml

    <appSettings>
      <add key="Report1" value="<Report1 SourceFilePath=""value1"" DestinationFolderPath=""value2"" />" />
      <add key="Report2" value="<Report2 SourceFilePath=""value1"" DestinationFolderPath=""value2"" />" />
    </appSettings>
    
  2. Сохраните xml в разделе конфигурации (см. Ответы выше)

  3. Используйте проект DslConfig .Добавьте его с помощью NuGet и посмотрите пример AppSpike.В вашем случае вы можете создать класс ReportConfig и использовать этот класс в качестве класса конфигурации.Пример:

    public class Report {
      string SourceFilePath { get; set; }
      string DesinationFolderPath { get; set; }
    }
    

Создание записи файла конфигурации в Variables.var

   import ReportClassNamespace from ReportClassAssembly

   Var["Report1"] = Report(SourceFilePath:"value1",DesinationFolderPath:"value2")
   Var["Report2"] = Report(SourceFilePath:"value1",DesinationFolderPath:"value2")
  1. Попробуйте проект NConfig
3 голосов
/ 04 января 2012

Вы не можете сделать это, как вы предлагаете.

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

<appSettings>
      <add key="Report1:SourceFilePath" value="value1" />
      <add key="Report1:DestinationFolderPath" value="value2" />
      <add key="Report2:SourceFilePath" value="value1" />
      <add key="Report2:DestinationFolderPath" value="value2" />
</appSettings>

Хотя лучшим способом было бы определить собственный ConfigurationSection.

Вот несколько ссылок по этому поводу:

0 голосов
/ 04 января 2012

Лучший из известных мне подходов - создать свой собственный класс «Настройки» и сериализовать / десиаризовать его для чтения / записи вашего приложения. Настройки.

Также вы можете использовать Admin. страница вашего сайта, чтобы сохранить все настройки в нем.

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

...