次の方法で共有


繰り返し XML 要素にインデックスが含まれる

Microsoft.Extensions.Configuration.Xmlを使用して、Name属性を持たない XML 要素を繰り返し含む XML ドキュメントを読み取る場合、これらの繰り返し要素で作成されたConfigurationエントリの構成パスにインデックスが追加されるようになりました。

導入されたバージョン

.NET 6

以前の動作

Name属性を区別せずに繰り返し要素を示す次の XML スニペットについて考えてみます。

<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 を更新して、2 つの属性を同じ要素に折りたたむことができます。 例えば次が挙げられます。

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

または、 IConfiguration キーのインデックス (0、1、2 など) が必要になるようにコードを更新することもできます。

configRoot.GetSection("Level1:Level2")

なる

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

影響を受ける API

こちらも参照ください