重複的 XML 元素包括索引
在使用 Microsoft.Extensions.Configuration.Xml 讀取有 XML 元素不含 Name
屬性且重複的 XML 文件時,使用這些重複元素建立的 Configuration
組態路徑後方現在會加上索引。
導入的版本
.NET 6
先前的行為
以下列 XML 程式碼片段來說,其中顯示重複的元素,而未區分 Name
屬性。
<settings>
<Data ConnectionString="TestConnectionString" />
<Data Provider="MySql" />
</settings>
<configuration>
<Level1>
<Level2 Key1="Value1" />
<Level2 Key2="Value2" />
</Level1>
</configuration>
從這些 XML 檔案建立的組態分別為:
Data:ConnectionString = TestConnectionString
Data:Provider = MySql
及
Level1:Level2:Key1 = Value1
Level1:Level2:Key2 = Value2
分別。
新的行為
從先前行為章節中的 XML 檔案建立的組態,現在分別為:
Data:0:ConnectionString = TestConnectionString
Data:1:Provider = MySql
及
Level1:Level2:0:Key1 = Value1
Level1:Level2:1:Key2 = Value2
分別。
中斷性變更的類型
這項變更會影響二進位相容性。
變更原因
為了完全支援沒有 Name
屬性的重複 XML 元素,而引進這項變更。 先前行為只允許重複的元素設定不重複的值 (使用屬性或子元素)。 如果重複的 XML 元素具有相同的屬性,則會擲回例外狀況。
建議的動作
若要取得原始行為,您可以更新 XML,將兩個屬性摺疊成同一個元素。 例如:
<configuration>
<Level1>
<Level2 Key1="Value1" Key2="Value2" />
</Level1>
</configuration>
或者,您也可以更新程式碼,讓 IConfiguration
索引鍵中出現索引 (例如 0、1、2):
configRoot.GetSection("Level1:Level2")
變成
configRoot.GetSection("Level1:Level2:0")
受影響的 API
- Microsoft.Extensions.Configuration.XmlConfigurationExtensions
- Microsoft.Extensions.Configuration.Xml.XmlStreamConfigurationProvider
- Microsoft.Extensions.Configuration.Xml.XmlConfigurationSource