Freigeben über


„XmlSecureResolver“ ist veraltet

Die Methode System.Xml.XmlSecureResolver.GetEntity(Uri, String, Type) löst bedingungslos zur Laufzeit ein XmlException . Wenn Ihre Anwendung XmlSecureResolver nutzt und Sie versuchen, eine XML-Ressource darüber aufzulösen, schlägt die Auflösung mit einer Ausnahme fehl.

Darüber hinaus ist der gesamte System.Xml.XmlSecureResolver Typ veraltet. Alle Verweise auf diesen Typ führen zur Buildzeit zu einer SYSLIB0047-Warnung. Wenn Sie die Einstellung aktiviert haben, dass Warnungen als Fehler behandelt werden, wird dies bei einem Verweis Ihrer Anwendung auf XmlSecureResolver einen Build-Abbruch verursachen.

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

Vorheriges Verhalten

In .NET Framework erstellt XmlSecureResolver.GetEntity(Uri, String, Type) eine CAS-Sandbox (Code Access Security), um den Prozess zur Auflösung externer XML-Ressourcen einzuschränken. Wenn gegen die Richtlinie verstoßen wird, wird eine SecurityException ausgelöst.

In .NET Core 3.1 und .NET 6 XmlSecureResolver.GetEntity(Uri, String, Type) schränkt die externe XML-Ressourcenauflösung überhaupt nicht ein. Die Auflösung externer Ressourcen darf ohne Einschränkungen fortgesetzt werden.

Neues Verhalten

Ab .NET 7 löst XmlSecureResolver.GetEntity(Uri, String, Type) bedingungslos eine XmlException aus. Es erstellt keine CAS-Sandbox und versucht nicht, die externe Ressource aufzulösen.

Eingeführte Version

.NET 7

Art der einschneidenden Änderung

Diese Änderung kann sich auf Quellkompatibilität und binäre Kompatibilität auswirken.

Grund für Änderung

Diese Änderung verbessert die Sicherheit des .NET-Ökosystems. Diese Veraltung verschiebt das Verhalten von XmlSecureResolver bei Ausführung unter .NET 7 oder höher von ausfallgefährdet (immer Auflösung ausführen) zu ausfallsicher (nie Auflösung ausführen).

Verwenden Sie stattdessen die neu eingeführte statische Eigenschaft XmlResolver.ThrowingResolver. Diese Eigenschaft stellt eine XmlResolver-Instanz bereit, die das Auflösen externer XML-Ressourcen verbietet.

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;

Betroffene APIs