Gli elementi XML ripetuti includono l'indice
Quando Microsoft.Extensions.Configuration.Xml viene utilizzato per leggere un documento XML con elementi XML ripetuti senza un attributo Name
, le voci Configuration
create con questi elementi ripetuti hanno ora un indice aggiunto al percorso di configurazione.
Versione introdotta
.NET 6
Comportamento precedente
Si considerino i frammenti XML seguenti che mostrano elementi ripetuti senza un attributo Name
distinto.
<settings>
<Data ConnectionString="TestConnectionString" />
<Data Provider="MySql" />
</settings>
<configuration>
<Level1>
<Level2 Key1="Value1" />
<Level2 Key2="Value2" />
</Level1>
</configuration>
Le configurazioni create da questi file XML sono:
Data:ConnectionString = TestConnectionString
Data:Provider = MySql
e
Level1:Level2:Key1 = Value1
Level1:Level2:Key2 = Value2
rispettivamente.
Nuovo comportamento
Le configurazioni create dai file XML nella sezione Comportamento precedente sono ora:
Data:0:ConnectionString = TestConnectionString
Data:1:Provider = MySql
e
Level1:Level2:0:Key1 = Value1
Level1:Level2:1:Key2 = Value2
rispettivamente.
Tipo di modifica che causa un'interruzione
Questa modifica può influire sulla compatibilità binaria.
Motivo della modifica
Questa modifica è stata introdotta per supportare completamente elementi XML ripetuti che non dispongono di un attributo Name
. Il comportamento precedente è consentito solo per gli elementi ripetuti di impostare valori univoci (usando attributi o sottoelementi). Se gli elementi XML ripetuti hanno lo stesso attributo, è stata generata un'eccezione.
Azione consigliata
Per ottenere il comportamento originale, è possibile aggiornare il codice XML per comprimere i due attributi nello stesso elemento. Ad esempio:
<configuration>
<Level1>
<Level2 Key1="Value1" Key2="Value2" />
</Level1>
</configuration>
In alternativa, è possibile aggiornare il codice in modo da prevedere indici (ad esempio 0, 1, 2) nelle chiavi IConfiguration
:
configRoot.GetSection("Level1:Level2")
diventa
configRoot.GetSection("Level1:Level2:0")
API interessate
- Microsoft.Extensions.Configuration.XmlConfigurationExtensions
- Microsoft.Extensions.Configuration.Xml.XmlStreamConfigurationProvider
- Microsoft.Extensions.Configuration.Xml.XmlConfigurationSource