XmlSecureResolver is verouderd
De methode System.Xml.XmlSecureResolver.GetEntity(Uri, String, Type) gooit een XmlException onvoorwaardelijke uitvoering. Als uw toepassing wordt gebruikt XmlSecureResolver en u een XML-resource probeert op te lossen, mislukt de oplossing met een uitzondering.
Daarnaast is het hele System.Xml.XmlSecureResolver type verouderd. Alle verwijzingen naar dit type resulteren in een SYSLIB0047 waarschuwing tijdens de build. Als u waarschuwingen als fouten hebt ingeschakeld, veroorzaakt dit een build-onderbreking als uw toepassing verwijst 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);
Vorig gedrag
In .NET Framework XmlSecureResolver.GetEntity(Uri, String, Type) maakt u een CAS-sandbox (Code Access Security) om het externe XML-resourceomzettingsproces te beperken. Als het beleid wordt geschonden, wordt er een SecurityException gegenereerd.
In .NET Core 3.1 en .NET 6 wordt XmlSecureResolver.GetEntity(Uri, String, Type) de resolutie van externe XML-resources helemaal niet beperkt. Externe resourceomzetting mag zonder beperkingen worden voortgezet.
Nieuw gedrag
Vanaf .NET 7 XmlSecureResolver.GetEntity(Uri, String, Type) gooit voorwaardelijke een XmlException. Er wordt geen CAS-sandbox gemaakt en wordt niet geprobeerd de externe resource op te lossen.
Versie geïntroduceerd
.NET 7
Type wijziging die fouten veroorzaken
Deze wijziging kan van invloed zijn op de broncompatibiliteit en binaire compatibiliteit.
Reden voor wijziging
Deze wijziging verbetert de beveiliging van het .NET-ecosysteem. Met deze verdoezeling wordt het gedrag van XmlSecureResolver fail-gevaarlijk (altijd oplossing uitvoeren) verplaatst naar fail-safe (nooit oplossing uitvoeren) bij uitvoering op .NET 7 of hoger.
Aanbevolen actie
Overweeg in plaats daarvan de zojuist geïntroduceerde statische eigenschap XmlResolver.ThrowingResolverte gebruiken. Deze eigenschap biedt een XmlResolver exemplaar dat externe resourceomzetting verbiedt.
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;