Mitigación: validación de esquemas XML

En .NET Framework 4.6, la validación de esquemas XSD detecta una infracción de la restricción única si se usa una clave compuesta y una clave está vacía.

Impacto

El impacto de este cambio debe ser mínimo: según la especificación del esquema, se espera un error de validación de esquema si se infringe xsd:unique usando una clave compuesta con una clave vacía.

Mitigación

El hecho de que se detecte un error de validación de esquema si una clave compuesta tiene una clave vacía es una característica configurable:

  • A partir de las aplicaciones que tienen como destino .NET Framework 4.6, la detección del error de validación de esquema está habilitada de forma predeterminada, aunque se puede optar por no incluirlo, de manera que no se detecte el error.

  • En las aplicaciones que se ejecutan en .NET Framework 4.6, pero que tienen como destino .NET Framework 4.5.2 y versiones anteriores, no se detecta ningún error de validación de esquema de forma predeterminada, aunque se puede optar por recibirlo, de manera que se detecte el error.

Este comportamiento se puede configurar mediante la clase AppContext para definir el valor del conmutador System.Xml.IgnoreEmptyKeySequences. Dado que el valor predeterminado del modificador es false (no se omiten las secuencias de claves vacías), las aplicaciones que tienen como destino .NET Framework 4.6 pueden optar por no recibir el comportamiento usando el siguiente código para establecer el valor del modificador en 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)

Para las aplicaciones destinadas a .NET Framework 4.5.2 y a versiones anteriores, dado que el valor predeterminado del modificador es true (se omiten las secuencias de claves vacías), se puede garantizar que una clave compuesta con una clave vacía genera un error de validación de esquema mediante el siguiente código para establecer el valor del modificador en 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)

Vea también