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.
Acción recomendada
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
- Microsoft.Extensions.Configuration.XmlConfigurationExtensions
- Microsoft.Extensions.Configuration.Xml.XmlStreamConfigurationProvider
- Microsoft.Extensions.Configuration.Xml.XmlConfigurationSource