重复的 XML 元素包括索引

Microsoft.Extensions.Configuration.Xml 用于读取没有 Name 特性的重复 XML 元素的 XML 文档时,使用这些重复元素创建的 Configuration 条目现在已在其配置路径上追加索引。

引入的版本

.NET 6

旧行为

请考虑以下 XML 代码片段,这些代码片段显示重复的元素,且不存在有区分性的 Name 特性。

<settings>
  <Data ConnectionString="TestConnectionString" />
  <Data Provider="MySql" />
</settings>
<configuration>
    <Level1>
        <Level2 Key1="Value1" />
        <Level2 Key2="Value2" />
    </Level1>
</configuration>

从这些 XML 文件创建的配置为:

Data:ConnectionString = TestConnectionString
Data:Provider = MySql

and

Level1:Level2:Key1 = Value1
Level1:Level2:Key2 = Value2

与上文 XML 文件分别对应。

新行为

上一行为部分中的 XML 文件创建的配置现在为:

Data:0:ConnectionString = TestConnectionString
Data:1:Provider = MySql

and

Level1:Level2:0:Key1 = Value1
Level1:Level2:1:Key2 = Value2

与上文 XML 文件分别对应。

中断性变更的类型

此项更改可能会影响二进制兼容性

更改原因

引入此更改,以完全支持没有 Name 特性的重复 XML 元素。 上一行为仅允许重复元素设置唯一值(使用特性或子元素)。 如果重复的 XML 元素具有相同的特性,则会引发异常。

若要获取原始行为,可以更新 XML 以将两个特性折叠到同一元素中。 例如:

<configuration>
    <Level1>
        <Level2 Key1="Value1" Key2="Value2" />
    </Level1>
</configuration>

或者,可以将代码更新为 IConfiguration 键中的预期索引(如 0、1、2):

configRoot.GetSection("Level1:Level2")

将变为

configRoot.GetSection("Level1:Level2:0")

受影响的 API

另请参阅