Как бороться с измененным 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, Я нашел образец кода в этом посте.

Другие вопросы по тегам