Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Metoda System.Xml.XmlSecureResolver.GetEntity(Uri, String, Type) bezwarunkowo zgłasza 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 błąd kompilacji, jeśli aplikacja odwołuje się do 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 runtime.
object entity = resolver.GetEntity(
absoluteUri: new Uri("https://www.example.com/some-entity"),
role: null,
ofObjectToReturn: null);
Poprzednie zachowanie
W programie .NET Framework XmlSecureResolver.GetEntity(Uri, String, Type) konstruuje piaskownicę zabezpieczeń dostępu kodu (CAS), 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. Rozwiązywanie zasobów zewnętrznych może odbywać się bez ograniczeń.
Nowe zachowanie
Począwszy od platformy .NET 7, XmlSecureResolver.GetEntity(Uri, String, Type) bezwarunkowo zgłasza wartość XmlException. Nie tworzy środowiska odizolowanego CAS i nie próbuje rozwiązać zasobu zewnętrznego.
Wersja wprowadzona
.NET 7
Typ zmiany przełamującej
Ta zmiana może mieć wpływ na zgodność źródła i zgodność binarną.
Przyczyna zmiany
Ta zmiana zwiększa bezpieczeństwo ekosystemu platformy .NET. To przestarzenie przenosi zachowanie niebezpiecznego w przypadku awarii XmlSecureResolver na działanie bezpieczne w przypadku awarii (nigdy nie wykonuje rozwiązywania problemów) podczas korzystania z platformy .NET 7 lub wyższej.
Zalecana akcja
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;