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.

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

Siehe auch