Freigeben über


Wiederholte XML-Elemente enthalten einen Index

Wenn Microsoft.Extensions.Configuration.Xml zum Lesen eines XML-Dokuments mit wiederholten XML-Elementen ohne Attribut Name verwendet wird, haben die Configuration mit diesen wiederholten Elementen erstellten Einträge jetzt einen Index an ihren Konfigurationspfad angefügt.

Eingeführte Version

.NET 6

Vorheriges Verhalten

Betrachten Sie die folgenden XML-Codeausschnitte, die wiederholte Elemente ohne ein unterscheidungsmerkendes Name Attribut anzeigen.

<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

beziehungsweise.

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

beziehungsweise.

Art der einschneidenden Änderung

Diese Änderung kann sich auf die Binäre Kompatibilität auswirken.

Grund für Änderung

Diese Änderung wurde eingeführt, um wiederholte XML-Elemente vollständig zu unterstützen, die nicht über ein Name Attribut verfügen. Das vorherige Verhalten ist nur für wiederholte Elemente zulässig, um eindeutige Werte (mithilfe von Attributen oder Unterelementen) festzulegen. Wenn wiederholte XML-Elemente dasselbe Attribut hatten, wurde eine Ausnahme ausgelöst.

Um das ursprüngliche Verhalten zu erhalten, können Sie Ihren XML-Code aktualisieren, um die beiden Attribute in dasselbe Element zu reduzieren. Beispiel:

<configuration>
    <Level1>
        <Level2 Key1="Value1" Key2="Value2" />
    </Level1>
</configuration>

Alternativ können Sie Ihren Code so aktualisieren, dass Indizes (z. B. 0, 1, 2) in den IConfiguration Schlüsseln erwartet werden:

configRoot.GetSection("Level1:Level2")

wird

configRoot.GetSection("Level1:Level2:0")

Betroffene APIs

Siehe auch