Compartir a través de


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 Name atributo, las Configuration entradas 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 distintivo Name .

<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.

Nuevo comportamiento

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 disruptivo

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 Name atributo . El comportamiento anterior solo permite que los elementos repetidos establezcan valores únicos (mediante atributos o subelementos). Si los elementos XML repetidos tenían el mismo atributo, se produjo una excepción.

Para obtener el comportamiento original, puede actualizar el XML para combinar 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 IConfiguration claves:

configRoot.GetSection("Level1:Level2")

se convierte en

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

Las APIs afectadas

Consulte también