Powtarzające się elementy XML obejmują indeks

Gdy Microsoft.Extensions.Configuration.Xml jest używany do odczytywania dokumentu XML zawierającego powtarzające się elementy XML bez atrybutu Name , Configuration wpisy utworzone przy użyciu tych powtarzających się elementów mają teraz indeks dołączony do ścieżki konfiguracji.

Wprowadzona wersja

.NET 6

Poprzednie zachowanie

Rozważ następujące fragmenty kodu XML, które pokazują powtarzające się elementy bez atrybutu wyróżniającego Name .

<settings>
  <Data ConnectionString="TestConnectionString" />
  <Data Provider="MySql" />
</settings>
<configuration>
    <Level1>
        <Level2 Key1="Value1" />
        <Level2 Key2="Value2" />
    </Level1>
</configuration>

Konfiguracje utworzone na podstawie tych plików XML to:

Data:ConnectionString = TestConnectionString
Data:Provider = MySql

oraz

Level1:Level2:Key1 = Value1
Level1:Level2:Key2 = Value2

na miesiąc.

Nowe zachowanie

Konfiguracje utworzone na podstawie plików XML w sekcji Poprzednie zachowanie są teraz następujące:

Data:0:ConnectionString = TestConnectionString
Data:1:Provider = MySql

oraz

Level1:Level2:0:Key1 = Value1
Level1:Level2:1:Key2 = Value2

na miesiąc.

Typ zmiany powodującej niezgodność

Ta zmiana może mieć wpływ na zgodność binarną.

Przyczyna wprowadzenia zmiany

Ta zmiana została wprowadzona, aby w pełni obsługiwać powtarzające się elementy XML, które nie mają atrybutu Name . Poprzednie zachowanie zezwalało tylko na powtarzające się elementy w celu ustawienia unikatowych wartości (przy użyciu atrybutów lub podelementów). Jeśli powtarzające się elementy XML miały ten sam atrybut, został zgłoszony wyjątek.

Aby uzyskać oryginalne zachowanie, możesz zaktualizować kod XML, aby zwinąć dwa atrybuty do tego samego elementu. Na przykład:

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

Możesz też zaktualizować kod, aby oczekiwał indeksów (takich jak 0, 1, 2) w kluczach IConfiguration :

configRoot.GetSection("Level1:Level2")

Staje się

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

Dotyczy interfejsów API

Zobacz też