Los elementos XML repetidos incluyen índice

Cuando Microsoft.Extensions.Configuration.Xml se usa para leer un documento XML que tiene elementos XML repetidos sin un atributo Name, las entradas Configuration creadas con estos elementos repetidos ahora tienen un índice anexado a su ruta de configuración.

Versión introducida

.NET 6

Comportamiento anterior

Tenga en cuenta los siguientes fragmentos XML que muestran elementos repetidos sin un atributo Name distintivo.

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

Las configuraciones creadas a partir de estos archivos XML eran:

Data:ConnectionString = TestConnectionString
Data:Provider = MySql

y

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

respectivamente.

Comportamiento nuevo

Las configuraciones creadas a partir de los archivos XML de la sección Comportamiento anterior ahora son:

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

y

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

respectivamente.

Tipo de cambio importante

Este cambio puede afectar a la compatibilidad binaria.

Motivo del cambio

Este cambio se introdujo para admitir completamente elementos XML repetidos que no tienen un atributo Name. El comportamiento anterior solo permitía a los elementos repetidos establecer valores únicos (mediante atributos o subelementos). Si los elementos XML repetidos tenían el mismo atributo, se producía una excepción.

Para obtener el comportamiento original, puede actualizar el XML para contraer los dos atributos en el mismo elemento. Por ejemplo:

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

Como alternativa, puede actualizar el código para esperar índices (como 0, 1, 2) en las claves IConfiguration:

configRoot.GetSection("Level1:Level2")

se convierte en

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

API afectadas

Vea también