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.
Ação recomendada
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
- Microsoft.Extensions.Configuration.XmlConfigurationExtensions
- Microsoft.Extensions.Configuration.Xml.XmlStreamConfigurationProvider
- Microsoft.Extensions.Configuration.Xml.XmlConfigurationSource