Upprepade XML-element inkluderar index
När Microsoft.Extensions.Configuration.Xml används för att läsa ett XML-dokument som har upprepade XML-element utan attribut Name
, har posterna Configuration
som skapats med dessa upprepade element nu ett index som läggs till i deras konfigurationssökväg.
Version introducerad
.NET 6
Tidigare beteende
Överväg följande XML-kodfragment som visar upprepade element utan ett särskiljande Name
attribut.
<settings>
<Data ConnectionString="TestConnectionString" />
<Data Provider="MySql" />
</settings>
<configuration>
<Level1>
<Level2 Key1="Value1" />
<Level2 Key2="Value2" />
</Level1>
</configuration>
Konfigurationerna som skapades från dessa XML-filer var:
Data:ConnectionString = TestConnectionString
Data:Provider = MySql
och
Level1:Level2:Key1 = Value1
Level1:Level2:Key2 = Value2
månad.
Nytt beteende
De konfigurationer som skapats från XML-filerna i avsnittet Föregående beteende är nu:
Data:0:ConnectionString = TestConnectionString
Data:1:Provider = MySql
och
Level1:Level2:0:Key1 = Value1
Level1:Level2:1:Key2 = Value2
månad.
Typ av icke-bakåtkompatibel ändring
Den här ändringen kan påverka binär kompatibilitet.
Orsak till ändringen
Den här ändringen introducerades för att fullt ut stödja upprepade XML-element som inte har något Name
attribut. Det tidigare beteendet tillät endast upprepade element att ange unika värden (med hjälp av attribut eller underelement). Om upprepade XML-element hade samma attribut utlöstes ett undantag.
Rekommenderad åtgärd
För att få det ursprungliga beteendet kan du uppdatera XML-koden för att komprimera de två attributen till samma element. Till exempel:
<configuration>
<Level1>
<Level2 Key1="Value1" Key2="Value2" />
</Level1>
</configuration>
Du kan också uppdatera koden för att förvänta dig index (till exempel 0, 1, 2) i IConfiguration
nycklarna:
configRoot.GetSection("Level1:Level2")
Blir
configRoot.GetSection("Level1:Level2:0")
Berörda API:er
- Microsoft.Extensions.Configuration.XmlConfigurationExtensions
- Microsoft.Extensions.Configuration.Xml.XmlStreamConfigurationProvider
- Microsoft.Extensions.Configuration.Xml.XmlConfigurationSource