使用异构ConfigurationElementCollection项目保存app.config时出现问题

时间:2016-06-03 20:27:01

标签: c# winforms configuration app-config configurationmanager

我有一个应用程序,它读取单独应用程序的app.config。 app.config包含异构元素的集合。我正在构建的应用程序将生成一个显示app.config自定义部分的TreeView控件。除非我向下钻取并读取/显示自定义部分的内容,否则配置对象的Save()方法可以正常工作。我以this为例(也找到了here)。问题似乎是当我保存时(在查看之后,无论我是否对底层配置进行了更改),都会调用GetElementKey方法。这将返回元素集合的Key值。但是,此值将传递给CreateNewElement方法。这会导致问题,因为CreateNewElement会根据传入的elementName传回一个新类型。此时元素名称不会被传入,只传递键值。

我注意到的另一个奇怪的事情,就是通过几次单步执行代码,如果我没有从配置中读取值来构建UI来显示它们,那么我在每个元素中点击两次GetElementKey根本没有调用collection和CreateNewElement。当我显示值时会发生什么,GetElementKey的调用次数相同。然而,它返回并再次调用,然后使用键值调用CreateNewElement,如上所述。希望有人可以向我描述一下导致这一系列事件发生的情况。在将xml反序列化为配置对象时,是否需要更改属性?

这是我的app.config结构化方式:

<configuration>
  <configSections>
    <section name="section1" type="example" />
  </configSections>
  <section1>
    <node1>
      <elementA name="anElement" />
    </node1>
    <node2>
      <add key="1" value="foo" />
    </node2>
    <node3>
      <elementB>
        <elementC name="anElement"/>
        <elementD >
          <elementE>
            <foo name="foo1" />
            <bar name="bar1" />
          </elementE>
          <elementF>
            <elementG />
          </elementF>
        </elementD>
      </elementB>
  </section1>
</configuration>

问题与节点section1 / node3 / elementD / elementE中的集合有关。在“foo”和“bar”(每次2次)上调用GetElementKey后,再次调用它,并将“foo1”传递给CreateNewElement,这就是事情发生时。

0 个答案:

没有答案