Wiederholte XML-Elemente enthalten Index
Wenn Microsoft.Extensions.Configuration.Xml verwendet wird, um ein XML-Dokument zu lesen, das wiederholte XML-Elemente ohne Name
-Attribut enthält, wird jetzt an die Configuration
-Einträge, die mit diesen wiederholten Elementen erstellt wurden, ein Index an ihren Konfigurationspfad angefügt.
Eingeführt in Version
.NET 6
Vorheriges Verhalten
Betrachten Sie die folgenden XML-Codeschnipsel, die wiederholte Elemente ohne ein unterscheidendes Name
-Attribut zeigen.
<settings>
<Data ConnectionString="TestConnectionString" />
<Data Provider="MySql" />
</settings>
<configuration>
<Level1>
<Level2 Key1="Value1" />
<Level2 Key2="Value2" />
</Level1>
</configuration>
Die Konfigurationen, die aus diesen XML-Dateien erstellt wurden, waren:
Data:ConnectionString = TestConnectionString
Data:Provider = MySql
und
Level1:Level2:Key1 = Value1
Level1:Level2:Key2 = Value2
.
Neues Verhalten
Die Konfigurationen, die aus den XML-Dateien im Abschnitt Vorheriges Verhalten erstellt wurden, sind jetzt:
Data:0:ConnectionString = TestConnectionString
Data:1:Provider = MySql
und
Level1:Level2:0:Key1 = Value1
Level1:Level2:1:Key2 = Value2
.
Typ des Breaking Changes
Diese Änderung kann sich auf die binäre Kompatibilität auswirken.
Grund für die Änderung
Diese Änderung wurde eingeführt, um wiederholte XML-Elemente ohne Name
-Attribut vollständig zu unterstützen. Das vorherige Verhalten erlaubte nur, dass wiederholte Elemente eindeutige Werte festlegen (mithilfe von Attributen oder Unterelementen). Wenn wiederholte XML-Elemente das gleiche Attribut aufwiesen, wurde eine Ausnahme ausgelöst.
Empfohlene Maßnahme
Um das ursprüngliche Verhalten abzurufen, können Sie Ihr XML aktualisieren, um die beiden Attribute in dasselbe Element einzubinden reduzieren. Beispiel:
<configuration>
<Level1>
<Level2 Key1="Value1" Key2="Value2" />
</Level1>
</configuration>
Alternativ können Sie Ihren Code aktualisieren, um Indizes (z. B. 0, 1, 2) in den IConfiguration
-Schlüsseln zu erwarten:
configRoot.GetSection("Level1:Level2")
Vervollständigung
configRoot.GetSection("Level1:Level2:0")
Betroffene APIs
- Microsoft.Extensions.Configuration.XmlConfigurationExtensions
- Microsoft.Extensions.Configuration.Xml.XmlStreamConfigurationProvider
- Microsoft.Extensions.Configuration.Xml.XmlConfigurationSource