Udostępnij za pośrednictwem


Element XmlSecureResolver jest przestarzały

Metoda System.Xml.XmlSecureResolver.GetEntity(Uri, String, Type) bezwarunkowo rzuca XmlException w czasie wykonywania. Jeśli aplikacja korzysta XmlSecureResolver i próbujesz rozwiązać zasób XML za jego pośrednictwem, rozwiązanie zakończy się niepowodzeniem z wyjątkiem.

Ponadto cały System.Xml.XmlSecureResolver typ jest przestarzały. Wszystkie odwołania do tego typu spowodują wyświetlenie ostrzeżenia SYSLIB0047 w czasie kompilacji. Jeśli włączono ostrzeżenia jako błędy, spowoduje to przerwa w kompilacji, jeśli aplikacja odwołuje się do XmlSecureResolverelementu .

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);

Poprzednie zachowanie

W programie .NET Framework skonstruuje piaskownicę zabezpieczeń dostępu kodu (CAS), XmlSecureResolver.GetEntity(Uri, String, Type) aby ograniczyć zewnętrzny proces rozpoznawania zasobów XML. Jeśli zasady są naruszone, SecurityException zgłaszany jest błąd.

W programach .NET Core 3.1 i .NET 6 XmlSecureResolver.GetEntity(Uri, String, Type) nie ogranicza w ogóle zewnętrznego rozpoznawania zasobów XML. Rozpoznawanie zasobów zewnętrznych może być kontynuowane bez ograniczeń.

Nowe zachowanie

Począwszy od platformy .NET 7, XmlSecureResolver.GetEntity(Uri, String, Type) bezwarunkowo zgłasza wartość XmlException. Nie tworzy piaskownicy cas i nie próbuje rozpoznać zasobu zewnętrznego.

Wprowadzona wersja

.NET 7

Typ zmiany powodującej niezgodność

Ta zmiana może mieć wpływ na zgodność źródła i zgodność binarną.

Przyczyna wprowadzenia zmiany

Ta zmiana zwiększa bezpieczeństwo ekosystemu platformy .NET. To obsoletion przenosi zachowanie z niebezpiecznego XmlSecureResolver w przypadku awarii (zawsze wykonuj rozwiązanie) w celu zapewnienia bezpieczeństwa w trybie fail-safe (nigdy nie wykonuje rozwiązywania problemów) podczas uruchamiania na platformie .NET 7 lub nowszym.

Rozważ użycie nowo wprowadzonej właściwości XmlResolver.ThrowingResolverstatycznej . Ta właściwość udostępnia XmlResolver wystąpienie, które zabrania rozpoznawania zasobów zewnętrznych.

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;

Dotyczy interfejsów API