Повторяющиеся 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

См. также