XmlSecureResolver je zastaralý

Metoda System.Xml.XmlSecureResolver.GetEntity(Uri, String, Type) bezpodmínečně vyvolá XmlException za běhu. Pokud vaše aplikace využívá XmlSecureResolver prostředek XML a pokusíte se ho vyřešit, řešení selže s výjimkou.

Kromě toho je celý System.Xml.XmlSecureResolver typ zastaralý. Všechny odkazy na tento typ budou mít za následek upozornění SYSLIB0047 v době sestavení. Pokud jste povolili varování jako chyby, dojde k přerušení sestavení, pokud vaše aplikace odkazuje na 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);

Předchozí chování

V rozhraní .NET Framework XmlSecureResolver.GetEntity(Uri, String, Type) vytvoří sandbox (Code Access Security, CAS), který omezuje proces řešení externích prostředků XML. Pokud dojde k porušení zásad, je vyvolána výjimka SecurityException.

cs-CZ: V .NET Core 3.1 a .NET 6 XmlSecureResolver.GetEntity(Uri, String, Type) vůbec neomezuje řešení externích XML zdrojů. Řešení externích prostředků může pokračovat bez omezení.

Nové chování

Počínaje rozhraním .NET 7, XmlSecureResolver.GetEntity(Uri, String, Type) bezpodmínečně vyvolá výjimku XmlException. Nekonstruuje prostředí sandbox CAS a nepokouší se zpracovat externí prostředek.

Verze byla představena

.NET 7

Typ zásadní změny

Tato změna může ovlivnit kompatibilitu zdroje a binární kompatibilitu.

Důvod změny

Tato změna zlepšuje zabezpečení ekosystému .NET. Toto zastarání mění chování XmlSecureResolver z nebezpečné při selhání (vždy provádět určování) na bezpečné při selhání (nikdy neprovádějte určování), když běží na .NET 7 nebo novější.

Zvažte místo toho použití nově zavedené statické vlastnosti XmlResolver.ThrowingResolver. Tato vlastnost poskytuje XmlResolver instanci, která zamezí vyřešení externích prostředků.

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;

Ovlivněná rozhraní API