XmlSecureResolver está obsoleto
O método System.Xml.XmlSecureResolver.GetEntity(Uri, String, Type) lança incondicionalmente um XmlException em tempo de execução. Se seu 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 System.Xml.XmlSecureResolver o tipo é obsoleto. Todas as referências a esse tipo resultarão em um aviso de SYSLIB0047 no momento da compilação. Se você tiver ativado avisos como erros, isso causará uma quebra de compilação se seu aplicativo fizer referência XmlSecureResolvera .
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 ao Código) para restringir o processo de resolução de recursos XML externos. Se a política for violada, um SecurityException é lançado.
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 pode prosseguir sem limitações.
Novo comportamento
A partir do .NET 7, XmlSecureResolver.GetEntity(Uri, String, Type) lança incondicionalmente um XmlExceptionarquivo . Ele não constrói uma área restrita do CAS e não tenta resolver o recurso externo.
Versão introduzida
.NET 7
Tipo de mudança de rutura
Essa alteração pode afetar a compatibilidade de origem e a compatibilidade binária.
Razão para a alteração
Essa alteração melhora a segurança do ecossistema .NET. Essa obsolescência move o comportamento de XmlSecureResolver fail-dangerous (sempre executar resolução) para fail-safe (nunca executar resolução) ao executar no .NET 7 ou posterior.
Ação recomendada
Em vez disso, considere usar a propriedade XmlResolver.ThrowingResolverestática recém-introduzida. Esta propriedade fornece uma XmlResolver instância 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;