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).
Empfohlene Maßnahme
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;