如何处理更改的ConfigurationSection-Definition?

时间:2014-07-14 09:51:51

标签: c# configuration configurationmanager

我有一个使用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的定义。如果我现在使用旧的config-File运行应用程序,它会在此行引发异常:

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

因为只有pathToSomeFile-Setting而另一个缺失。 有没有办法手动添加另一个(默认值)到此部分? 你会怎么处理这个?

提前致谢,Joerg

2 个答案:

答案 0 :(得分:1)

因为我不想将我的设计从我的自定义设置类型中改变,所以我发现了一种不同的方式: 我将IsRequired设置为false,因此当缺少设置时不会抛出异常。如果它丢失了,我将其设置为代码中的某个值。 在另一种方法中,我想覆盖一些Configuration-Section方法,但没有让它工作......

答案 1 :(得分:0)

  

现在我必须在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。我在此post找到了示例代码。