Не найдя другой альтернативы, я решил изменить схему раздела 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
в класс.