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.

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

Voir aussi