軽減策:XML スキーマ検証

.NET Framework 4.6 では、複合キーが使用され、1 つのキーが空の場合、XSD スキーマ検証で一意制約の違反が検出されます。

影響

この変更の影響は最小限のものになります。スキーマの仕様に基づき、複合キーが空のキーと共に使用されて xsd:unique の違反が発生した場合、スキーマの検証エラーの発生が予期されます。

軽減策

複合キーに空の 1 つのキーがある場合にスキーマ検証エラーが検出されるようにするかどうかは、構成可能な機能です。

  • .NET Framework 4.6 以降を対象とするアプリでは、スキーマ検証エラーの検出が既定で有効になっていますが、この動作を無効にして、スキーマ検証エラーが検出されないようにすることも可能です。

  • .NET Framework 4.6 の下で実行されているものの、.NET Framework 4.5.2 以前のバージョンを対象とするアプリでは、既定ではスキーマ検証エラーが検出されませんが、この動作を有効にして、スキーマ検証エラーが検出されるようにすることも可能です。

この動作は、AppContext クラスを使用して System.Xml.IgnoreEmptyKeySequences スイッチの値を定義することにより構成できます。 スイッチの既定値が false (空のキー シーケンスが無視されない) であるため、.NET Framework 4.6 を対象とするアプリは、以下のコードを使用してスイッチの値を true に設定することにより、その動作を無効にすることができます。

// Ignore empty key sequences in apps that target .NET 4.6
AppContext.SetSwitch("System.Xml.IgnoreEmptyKeySequences", true);
' Ignore empty key sequences in apps that target .NET 4.6
AppContext.SetSwitch("System.Xml.IgnoreEmptyKeySequences", True)

.NET Framework 4.5.2 以前のバージョンを対象とするアプリでは、スイッチの既定値が true (空のキー シーケンスが無視される) であるため、以下のコードを使用してスイッチの値を false に設定することにより、複合キーに空のキーがある場合にスキーマ検証エラーを生成させることが可能です。

// Do not ignore empty key sequences in apps that target .NET 4.5.1 and earlier
AppContext.SetSwitch("System.Xml.IgnoreEmptyKeySequences", false);
' Do Not ignore empty key sequences in apps that target .NET 4.5.1 And earlier
AppContext.SetSwitch("System.Xml.IgnoreEmptyKeySequences", False)

関連項目