Как бороться с измененным ConfigurationSection-Definition?
У меня есть файл конфигурации, который я прочитал с помощью ConfigurationManager. Есть некоторые разделы, которые я определил сам.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="applicationWideSettingsSection" type="MyTestApp.ApplicationSettings.ApplicationWideSettingsSection, MyTestAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</configSections>
<applicationWideSettingsSection>
<pathToSomeFile value="C:\Users\..." />
</applicationWideSettingsSection>
</configuration>
Появились новые требования: теперь я должен сохранить другое значение в applicationWideSettingsSection, например:
<applicationWideSettingsSection>
<pathToSomeFile value="C:\Users\..." />
<pathToSomeOtherFile value="C:\Programs\..." />
</applicationWideSettingsSection>
Поэтому я меняю свое определение applicationWideSettingsSection. Если я теперь запускаю приложение со старым файлом конфигурации, оно выдает исключение в этой строке:
var configSection = _config.GetSection("applicationWideSettingsSection");
потому что есть только pathToSomeFile-Setting, а другой отсутствует. Есть ли способ вручную добавить другое (значение по умолчанию) в этот раздел? Как бы вы справились с этим??
Заранее спасибо, Йорг
2 ответа
Поскольку я не хотел менять свой дизайн в отличие от своих пользовательских типов настроек, я нашел другой способ: я установил для IsRequired значение false, чтобы не возникало никаких исключений, если настройка отсутствует. Если он отсутствует, я устанавливаю это значение в коде. В другом подходе я хотел переопределить некоторые методы раздела конфигурации, но не заставил его работать...
теперь я должен сохранить другое значение в applicationWideSettingsSection
Вместо вашего пользовательского типа ApplicationWideSettingsSection
Вы можете использовать пары ключ-значение, так
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="applicationWideSettingsSection"
type="System.Configuration.NameValueSectionHandler" />
</configSections>
<applicationWideSettingsSection>
<pathToSomeFile value="C:\Users\..." />
</applicationWideSettingsSection>
</configuration>
Это сохранит 1 или много параметров и позволит вам перечислить внутренние параметры. Вы также можете попробовать DictionarySectionHandler
, Я нашел образец кода в этом посте.