XmlSecureResolver está obsoleto
O método System.Xml.XmlSecureResolver.GetEntity(Uri, String, Type) lança incondicionalmente uma XmlException em tempo de execução. Se o aplicativo utilizar XmlSecureResolver e você tentar resolver um recurso XML por meio dele, a resolução falhará com uma exceção.
Além disso, todo o tipo System.Xml.XmlSecureResolver está obsoleto. Todas as referências a esse tipo resultarão em um aviso SYSLIB0047 no momento do build. Se você tiver habilitado avisos como erros, isso causará uma quebra de build se o aplicativo fizer referência 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);
Comportamento anterior
No .NET Framework, XmlSecureResolver.GetEntity(Uri, String, Type) constrói uma área restrita CAS (segurança de acesso do código) para restringir o processo de resolução de recursos XML externos. Se a política for violada, uma SecurityException será lançada.
No .NET Core 3.1 e no .NET 6, XmlSecureResolver.GetEntity(Uri, String, Type) não restringe a resolução de recursos XML externos. A resolução de recursos externos tem permissão para continuar sem limitações.
Novo comportamento
A partir do .NET 7, o XmlSecureResolver.GetEntity(Uri, String, Type) lança incondicionalmente uma XmlException. Ele não constrói uma área restrita CAS e não tenta resolver o recurso externo.
Versão introduzida
.NET 7
Tipo de alteração interruptiva
Essa alteração pode afetar a compatibilidade com binários e a compatibilidade com a origem.
Motivo da alteração
Essa alteração melhora a segurança do ecossistema do .NET. Essa obsolescência move o comportamento de XmlSecureResolver de fail-dangerous (sempre executar resolução) para fail-safe (nunca executar resolução) ao executar no .NET 7 ou versões posteriores.
Ação recomendada
Em vez disso, considere usar a propriedade estática recém-introduzida XmlResolver.ThrowingResolver. Essa propriedade fornece uma instância XmlResolver que proíbe a resolução 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;