Partilhar via


Elementos XML repetidos incluem índice

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

Versão introduzida

.NET 6

Comportamento anterior

Considere os seguintes trechos XML que mostram elementos repetidos sem um atributo distintivo Name .

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

As configurações criadas a partir desses arquivos XML foram:

Data:ConnectionString = TestConnectionString
Data:Provider = MySql

e

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

, respetivamente.

Novo comportamento

As configurações criadas a partir dos arquivos XML na seção Comportamento anterior são agora:

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

e

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

, respetivamente.

Tipo de mudança de rutura

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

Razão para a alteração

Essa alteração foi introduzida para oferecer suporte total a elementos XML repetidos que não têm um Name atributo. O comportamento anterior só permitia que elementos repetidos definissem valores exclusivos (usando atributos ou subelementos). Se os elementos XML repetidos tivessem o mesmo atributo, uma exceção seria lançada.

Para obter o comportamento original, você pode 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 IConfiguration chaves:

configRoot.GetSection("Level1:Level2")

torna-se

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

APIs afetadas

Consulte também