Elementos XML repetidos incluem índice
Quando Microsoft.Extensions.Configuration.Xml é usado para ler um documento XML que tem elementos XML repetidos sem um atributo Name
, as entradas Configuration
criadas com esses elementos repetidos agora têm um índice acrescentado ao caminho de configuração.
Versão introduzida
.NET 6
Comportamento anterior
Considere os snippets XML a seguir que mostram elementos repetidos sem um atributo Name
de diferenciação.
<settings>
<Data ConnectionString="TestConnectionString" />
<Data Provider="MySql" />
</settings>
<configuration>
<Level1>
<Level2 Key1="Value1" />
<Level2 Key2="Value2" />
</Level1>
</configuration>
As configurações criadas desses arquivos XML foram:
Data:ConnectionString = TestConnectionString
Data:Provider = MySql
e
Level1:Level2:Key1 = Value1
Level1:Level2:Key2 = Value2
, respectivamente.
Novo comportamento
As configurações criadas com base nos arquivos XML na seção Comportamento anterior agora são:
Data:0:ConnectionString = TestConnectionString
Data:1:Provider = MySql
e
Level1:Level2:0:Key1 = Value1
Level1:Level2:1:Key2 = Value2
, respectivamente.
Tipo de alteração interruptiva
Essa alteração pode afetar a compatibilidade binária.
Motivo da alteração
Essa alteração foi introduzida para dar suporte total a elementos XML repetidos que não têm um atributo Name
. O comportamento anterior só permitia que elementos repetidos definissem valores exclusivos (usando atributos ou subelementos). Se elementos XML repetidos tiverem o mesmo atributo, uma exceção será gerada.
Ação recomendada
Para obter o comportamento original, você poderá 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 chaves IConfiguration
:
configRoot.GetSection("Level1:Level2")
se torna
configRoot.GetSection("Level1:Level2:0")
APIs afetadas
- Microsoft.Extensions.Configuration.XmlConfigurationExtensions
- Microsoft.Extensions.Configuration.Xml.XmlStreamConfigurationProvider
- Microsoft.Extensions.Configuration.Xml.XmlConfigurationSource