XmlSecureResolver está obsoleto

El método System.Xml.XmlSecureResolver.GetEntity(Uri, String, Type) produce incondicionalmente una excepción XmlException en tiempo de ejecución. Si la aplicación utiliza XmlSecureResolver e intenta resolver un recurso XML mediante ello, se producirá un error en la resolución con una excepción.

Además, todo el tipo System.Xml.XmlSecureResolver está obsoleto. Todas las referencias a este tipo generarán una advertencia SYSLIB0047 en tiempo de compilación. Si ha habilitado las advertencias como errores, esto provocará un salto de compilación si la aplicación hace referencia a XmlSecureResolver.

using System.Xml;

// Compiler warning SYSLIB0047: XmlSecureResolver type is obsolete.
XmlResolver resolver = new XmlSecureResolver(
    resolver: new XmlUrlResolver(),
    securityUrl: "https://www.example.com/");

// Call to XmlSecureResolver.GetEntity below throws XmlException at run time.
object entity = resolver.GetEntity(
    absoluteUri: new Uri("https://www.example.com/some-entity"),
    role: null,
    ofObjectToReturn: null);

Comportamiento anterior

En .NET Framework, XmlSecureResolver.GetEntity(Uri, String, Type) construye un espacio aislado de seguridad de acceso al código (CAS) para restringir el proceso de resolución de recursos XML externos. Si se infringe la directiva, se produce una excepción SecurityException.

En .NET Core 3.1 y .NET 6, XmlSecureResolver.GetEntity(Uri, String, Type) no restringe la resolución de recursos XML externos. La resolución de recursos externos puede continuar sin limitaciones.

Comportamiento nuevo

A partir de .NET 7, XmlSecureResolver.GetEntity(Uri, String, Type) inicia incondicionalmente una excepción XmlException. No construye un espacio aislado CAS y no intenta resolver el recurso externo.

Versión introducida

.NET 7

Tipo de cambio importante

Este cambio puede afectar a la compatibilidad de origen y la compatibilidad binaria.

Motivo del cambio

Este cambio mejora la seguridad del ecosistema de .NET. Esta obsolescencia cambia el comportamiento de XmlSecureResolver de un error peligroso (siempre realiza una resolución) a una resolución con error (nunca realiza la resolución) cuando se ejecuta en .NET 7 o una versión posterior.

Considere en su lugar el uso de la propiedad estática XmlResolver.ThrowingResolver recién introducida. Esta propiedad proporciona una instancia XmlResolver que prohíbe la resolución de recursos externos.

using System.Xml;

// BAD: Do not use XmlSecureResolver.
// XmlResolver resolver = new XmlSecureResolver(
//     resolver: new XmlUrlResolver(),
//     securityUrl: "https://www.example.com/");

// GOOD: Use XmlResolver.ThrowingResolver instead.
XmlResolver resolver = XmlResolver.ThrowingResolver;

API afectadas