XmlSecureResolver ist veraltet

Die Methode System.Xml.XmlSecureResolver.GetEntity(Uri, String, Type) löst zur Laufzeit bedingungslos eine XmlException aus. Wenn Ihre Anwendung XmlSecureResolver verwendet, und Sie versuchen, eine XML-Ressource darüber aufzulösen, tritt bei der Auflösung ein Ausnahmefehler auf.

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 Warnungen als Fehler aktiviert haben, führt dies zu einer Buildunterbrechung, wenn Ihre Anwendung auf XmlSecureResolver verweist.

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

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 schränkt XmlSecureResolver.GetEntity(Uri, String, Type) die Auflösung externer XML-Ressourcen ü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 wird keine CAS-Sandbox erstellt und nicht versucht, die externe Ressource aufzulösen.

Eingeführt in Version

.NET 7

Typ des Breaking Changes

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

Grund für die Ä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).

Erwägen Sie stattdessen die Verwendung der neu eingeführten statischen 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