【问题标题】:How to deal with changed ConfigurationSection-Definition?如何处理更改的 ConfigurationSection-Definition?
【发布时间】:2014-07-14 09:51:50
【问题描述】:

我有一个使用 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 而另一个丢失了。 有没有办法手动添加另一个(默认值)到这个部分? 你会怎么处理?

提前致谢,乔尔格

【问题讨论】:

    标签: c# configuration configurationmanager


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 似乎我必须更改我的设置设计......但似乎也没有其他方法可以解决这个问题,因为我将有机会在这种情况下添加一些缺失的设置的解决方案。到目前为止,谢谢,一旦我开始工作,我会尝试你的方式并标记为答案...... :)
      • 有道理,给你+1
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-21
      • 2021-08-09
      • 2010-10-24
      • 2011-08-11
      • 2015-06-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多