Повторяющиеся XML-элементы включают индекс
Если Microsoft.Extensions.Configuration.Xml используется для чтения XML-документа с повторяющимися XML-элементами без Name
атрибута, записи, созданные с этими повторяющимися элементами, 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
и
Level1:Level2:Key1 = Value1
Level1:Level2:Key2 = Value2
соответственно.
Новое поведение
Конфигурации, созданные из XML-файлов в разделе "Предыдущее поведение ", теперь:
Data:0:ConnectionString = TestConnectionString
Data:1:Provider = MySql
и
Level1:Level2:0:Key1 = Value1
Level1:Level2:1:Key2 = Value2
соответственно.
Тип критического изменения
Это изменение может повлиять на совместимость двоичного кода.
Причина изменения
Это изменение было введено для полной поддержки повторяющихся XML-элементов, которые не имеют атрибута Name
. Предыдущее поведение разрешено только для повторяющихся элементов задать уникальные значения (с помощью атрибутов или подэлементов). Если повторяющиеся XML-элементы имели один и тот же атрибут, создается исключение.
Рекомендуемое действие
Чтобы получить исходное поведение, можно обновить XML, чтобы свернуть два атрибута в один и тот же элемент. Например:
<configuration>
<Level1>
<Level2 Key1="Value1" Key2="Value2" />
</Level1>
</configuration>
Кроме того, вы можете обновить код, чтобы ожидать индексов (например, 0, 1, 2) в IConfiguration
ключах:
configRoot.GetSection("Level1:Level2")
становится
configRoot.GetSection("Level1:Level2:0")
Затронутые API
- Microsoft.Extensions.Configuration.XmlConfigurationExtensions
- Microsoft.Extensions.Configuration.Xml.XmlStreamConfigurationProvider
- Microsoft.Extensions.Configuration.Xml.XmlConfigurationSource