Les éléments XML répétés incluent un index
Quand Microsoft.Extensions.Configuration.Xml est utilisé pour lire un document XML qui a des éléments XML répétés sans attribut Name
, les entrées Configuration
créées avec ces éléments répétés ont maintenant un index ajouté à leur chemin de configuration.
Version introduite
.NET 6
Comportement précédent
Consultez les extraits de code XML suivants qui montrent des éléments répétés sans attribut Name
distinctif.
<settings>
<Data ConnectionString="TestConnectionString" />
<Data Provider="MySql" />
</settings>
<configuration>
<Level1>
<Level2 Key1="Value1" />
<Level2 Key2="Value2" />
</Level1>
</configuration>
Les configurations créées à partir de ces fichiers XML étaient les suivantes :
Data:ConnectionString = TestConnectionString
Data:Provider = MySql
and
Level1:Level2:Key1 = Value1
Level1:Level2:Key2 = Value2
, respectivement.
Nouveau comportement
Les configurations créées à partir des fichiers XML de la section Comportement précédent sont à présent les suivantes :
Data:0:ConnectionString = TestConnectionString
Data:1:Provider = MySql
and
Level1:Level2:0:Key1 = Value1
Level1:Level2:1:Key2 = Value2
, respectivement.
Type de changement cassant
Ce changement peut affecter la compatibilité binaire.
Raison du changement
Cette modification a été introduite pour prendre entièrement en charge les éléments XML répétés qui n’ont pas d’attribut Name
. Le comportement précédent autorisait uniquement les éléments répétés à définir des valeurs uniques (à l’aide d’attributs ou de sous-éléments). Si les éléments XML répétés avaient le même attribut, une exception était levée.
Action recommandée
Pour obtenir le comportement d’origine, vous pouvez mettre à jour votre code XML afin de réduire les deux attributs dans le même élément. Par exemple :
<configuration>
<Level1>
<Level2 Key1="Value1" Key2="Value2" />
</Level1>
</configuration>
Vous pouvez également mettre à jour votre code pour qu’il s’attende à des index (tels que 0, 1, 2) dans les clés IConfiguration
:
configRoot.GetSection("Level1:Level2")
devient
configRoot.GetSection("Level1:Level2:0")
API affectées
- Microsoft.Extensions.Configuration.XmlConfigurationExtensions
- Microsoft.Extensions.Configuration.Xml.XmlStreamConfigurationProvider
- Microsoft.Extensions.Configuration.Xml.XmlConfigurationSource