Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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 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 diferenciante 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 agora são:
Data:0:ConnectionString = TestConnectionString
Data:1:Provider = MySql
e
Level1:Level2:0:Key1 = Value1
Level1:Level2:1:Key2 = Value2
respetivamente.
Tipo de mudança disruptiva
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 Name atributo. 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ê 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")
se torna
configRoot.GetSection("Level1:Level2:0")
APIs afetadas
- Microsoft.Extensions.Configuration.XmlConfigurationExtensions
- Microsoft.Extensions.Configuration.Xml.XmlStreamConfigurationProvider
- Microsoft.Extensions.Configuration.Xml.XmlConfigurationSource