Elementos XML repetidos incluem índice

Quando Microsoft.Extensions.Configuration.Xml é usado para ler um documento XML que tem elementos XML repetidos sem um atributo Name, as entradas Configuration criadas com esses elementos repetidos agora têm um índice acrescentado ao caminho de configuração.

Versão introduzida

.NET 6

Comportamento anterior

Considere os snippets XML a seguir que mostram elementos repetidos sem um atributo Name de diferenciação.

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

As configurações criadas desses arquivos XML foram:

Data:ConnectionString = TestConnectionString
Data:Provider = MySql

e

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

, respectivamente.

Novo comportamento

As configurações criadas com base nos arquivos XML na seção Comportamento anterior agora são:

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

e

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

, respectivamente.

Tipo de alteração interruptiva

Essa alteração pode afetar a compatibilidade binária.

Motivo da alteração

Essa alteração foi introduzida para dar suporte total a elementos XML repetidos que não têm um atributo Name. O comportamento anterior só permitia que elementos repetidos definissem valores exclusivos (usando atributos ou subelementos). Se elementos XML repetidos tiverem o mesmo atributo, uma exceção será gerada.

Para obter o comportamento original, você poderá atualizar seu XML para recolher os dois atributos no mesmo elemento. Por exemplo:

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

Como alternativa, você pode atualizar seu código para esperar índices (como 0, 1, 2) nas chaves IConfiguration:

configRoot.GetSection("Level1:Level2")

se torna

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

APIs afetadas

Confira também