Delen via


XmlSecureResolver is verouderd

De methode System.Xml.XmlSecureResolver.GetEntity(Uri, String, Type) gooit onvoorwaardelijk een XmlException tijdens de uitvoering. Als uw toepassing gebruikmaakt van XmlSecureResolver en u probeert een XML-resource ermee op te lossen, zal de oplossing mislukken met een uitzondering.

Daarnaast is het hele System.Xml.XmlSecureResolver type verouderd. Alle verwijzingen naar dit type leiden tot een SYSLIB0047 waarschuwing tijdens de build. Als u waarschuwingen als fouten behandelt, veroorzaakt dit een onderbreking in het bouwen als uw toepassing verwijst naar 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);

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 werpt XmlSecureResolver.GetEntity(Uri, String, Type) onvoorwaardelijk een XmlException. Er wordt geen CAS-sandbox gemaakt en wordt niet geprobeerd de externe resource op te lossen.

Geïntroduceerde versie

.NET 7

Type van brekende verandering

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 veroudering wordt het gedrag van XmlSecureResolver gewijzigd van fail-dangerous (altijd resolutie uitvoeren) naar fail-safe (nooit resolutie uitvoeren) bij gebruik van .NET 7 of later.

Overweeg in plaats daarvan de zojuist geïntroduceerde statische eigenschap XmlResolver.ThrowingResolverte gebruiken. Deze eigenschap biedt een XmlResolver exemplaar dat externe bronresolutie 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;

Betreffende API's