Можно ли настраивать пользовательские разделы 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
к классу.