缓解:XML 架构验证
在 .NET Framework 4.6 中,如果使用复合键且有一个键为空,则 XSD 架构验证将检测是否违反唯一约束。
影响
此更改的影响应该很小:根据架构规范,如果因使用具有空键的复合键违反了 xsd:unique
,则会出现架构验证错误。
缓解
是否在复合键具有一个空键的情况下检测架构验证错误是一项可配置的功能:
从面向 .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)