Можно ли настраивать пользовательские разделы applicationSettings с помощью редактора конфигурации IIS 7?

Я хотел бы редактировать настройки приложения с помощью редактора конфигурации 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 ответ

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

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

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

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

Советы по реализации пользовательского провайдера:

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