如何处理改变的ConfigurationSection-Definition

本文关键字:改变 ConfigurationSection-Definition 处理 何处理 | 更新日期: 2023-09-27 18:12:41

我有一个配置文件,我与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>

有新的要求:现在我必须在applicationwidettingssection中存储另一个值,像这样:

<applicationWideSettingsSection>
    <pathToSomeFile value="C:'Users'..." />
    <pathToSomeOtherFile value="C:'Programs'..." />
</applicationWideSettingsSection>

所以我改变了applicationwidettingssection的定义。如果我现在用旧的配置文件运行应用程序,它会在这一行抛出一个异常:

var configSection = _config.GetSection("applicationWideSettingsSection");

因为只有pathToSomeFile-Setting而另一个缺失了。是否有一种方法可以手动添加另一个(默认值)到此部分?你会怎么处理这种情况?

提前感谢,Joerg

如何处理改变的ConfigurationSection-Definition

因为我不想改变我的设计远离我的自定义设置类型,我找到了一个不同的方法:我将IsRequired设置为false,因此当缺少该设置时不会抛出异常。如果没有,我将它设置为代码中的某个值。在另一种方法中,我想覆盖一些Configuration-Section方法,但没有让它工作…

现在我必须在applicationwidettingssection中存储另一个值

可以使用键值对代替自定义类型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>

这将存储一个或多个参数,并允许您枚举内部参数。你也可以试试DictionarySectionHandler。我在这篇文章中找到了示例代码