XmlSecureResolver устарел
Метод System.Xml.XmlSecureResolver.GetEntity(Uri, String, Type) безусловно создает исключение XmlException во время выполнения. Если приложение использует XmlSecureResolver и пытается разрешить xml-ресурс через него, разрешение завершится сбоем с исключением.
Кроме того, весь System.Xml.XmlSecureResolver тип устарел. Все ссылки на этот тип приводят к предупреждению SYSLIB0047 во время сборки. Если вы включили предупреждения в качестве ошибок, это приведет к разрыву сборки, если приложение ссылается 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);
Прежнее поведение
В платформа .NET Framework XmlSecureResolver.GetEntity(Uri, String, Type) создает песочницу безопасности доступа к коду (CAS), чтобы ограничить процесс разрешения внешних ресурсов XML. Если политика нарушается, SecurityException создается исключение.
В .NET Core 3.1 и .NET 6 XmlSecureResolver.GetEntity(Uri, String, Type) не ограничивает разрешение внешних ресурсов XML вообще. Разрешение внешних ресурсов допускается без ограничений.
Новое поведение
Начиная с .NET 7, XmlSecureResolver.GetEntity(Uri, String, Type) безусловно создает XmlExceptionисключение. Он не создает песочницу CAS и не пытается устранить внешний ресурс.
Представленные версии
.NET 7
Тип критического изменения
Это изменение может повлиять на совместимость исходного кода и совместимость на уровне двоичного кода.
Причина изменения
Это изменение повышает безопасность экосистемы .NET. Эта обзолеция перемещает поведение XmlSecureResolver от отработки отказа (всегда выполнять разрешение) в безопасное (никогда не выполняющее разрешение) при запуске в .NET 7 или более поздней версии.
Рекомендуемое действие
Вместо этого рекомендуется использовать только что введенное статическое свойство XmlResolver.ThrowingResolver. Это свойство предоставляет XmlResolver экземпляр, который запрещает разрешение внешних ресурсов.
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;