Можно ли настраивать пользовательские разделы applicationSettings с помощью редактора конфигурации IIS 7? - PullRequest
2 голосов
/ 16 сентября 2011

Я хотел бы редактировать настройки приложения с помощью редактора конфигурации IIS 7. Настройки хранятся в разделе applicationSettings, который автоматически добавляется при использовании Visual Studio для добавления настроек в проект. Мой раздел выглядит так:

<applicationSettings>
    <My.Custom.Properties.Settings>
      <setting name="SomePath" serializeAs="String">
        <value>D:\Folder\SubFolder</value>
      </setting>
    </My.Custom.Properties.Settings>
</applicationSettings>

Итак, следуя указаниям здесь , и после долгих проб и ошибок я могу загрузить этот раздел в редактор IIS. Я могу видеть (и редактировать) атрибуты элемента setting. Я также вижу элемент value, но путь к папке внутри него не загружен и не может быть отредактирован, что мне и нужно! Схема, которую я добавил в IIS, выглядит следующим образом:

<configSchema>
     <sectionSchema name="applicationSettings/My.Custom.Properties.Settings">
       <collection addElement="setting">
         <attribute name="name" type="string"></attribute>
         <attribute name="serializeAs" type="string"></attribute>
         <element name="value"></element>
       </collection>
     </sectionSchema>
</configSchema>

Кто-нибудь сумел сделать то, что я пытаюсь сделать, или есть способ обойти это, не включая возвращение к старому appSettings разделу?

1 Ответ

2 голосов
/ 21 сентября 2011

Не найдя другой альтернативы, я решил изменить схему раздела applicationSettings, чтобы значение элемента setting сохранялось как атрибут элемента, а не как другой элемент внутри него, чтоIIS Editor нравится.Итак, мои настройки теперь выглядят так:

<setting name="SomePath" serializeAs="String" value="D:\Folder\SubFolder">
</setting>

Это, конечно, означало реализацию моего собственного провайдера настроек (см. «Провайдеры пользовательских настроек» здесь ), чтобы я мог читать изновый атрибут.Это не так уж сложно, и тем более, если вы наследуете от LocalFileSettingsProvider, поставляемого с .NET.Более того, если вы не планируете изменять настройки во время выполнения, вам нужно всего лишь реализовать метод GetPropertyValues.

Недостатком этого подхода является то, что он усложняет время разработки поддержка Visual Studio, поскольку дизайнер параметров не распознает новую схему, и я не нашел способа заставить ее использовать пользовательский поставщик.Хорошая новость заключается в том, что дизайнер выдаст сообщение об ошибке, и вы все равно сможете использовать его для определения настроек.Однако при сохранении он перезапишет ваш файл конфигурации схемой по умолчанию.Моим решением было создать фрагмент JScript, который запускается на событии предварительной сборки Visual Studio и который изменяет параметры, измененные Visual Studio, в соответствии с моей схемой. Эта страница была очень полезна при кодировании сценария.

Советы по реализации настраиваемого поставщика:

  • Я использовал свойство AppDomainSetup.ConfigurationFile, чтобы перейти к моей конфигурацииfile.
  • При загрузке настроек, просто установите свойство SettingsPropertyValue.SerializedValue, и платформа будет десериализовать фактическое значение для вас.
  • Чтобы приложение использовало провайдера в runtime , щелкните индивидуальный параметр в конструкторе и на панели «Свойства» введите имя класса поставщика в поле «Поставщик».Чтобы указать поставщика для всех настроек, введенных через конструктор, нажмите кнопку Просмотр кода и добавьте SettingsProviderAttribute в класс.
...