重复的 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
- Microsoft.Extensions.Configuration.XmlConfigurationExtensions
- Microsoft.Extensions.Configuration.Xml.XmlStreamConfigurationProvider
- Microsoft.Extensions.Configuration.Xml.XmlConfigurationSource