Az XmlSecureResolver elavult

A metódus System.Xml.XmlSecureResolver.GetEntity(Uri, String, Type) feltétel nélkül dob egy XmlException a futásidőben. Ha az alkalmazás használja XmlSecureResolver , és megpróbál rajta keresztül feloldani egy XML-erőforrást, a feloldás kivétellel meghiúsul.

Emellett a teljes System.Xml.XmlSecureResolver típus elavult. Az erre a típusra mutató összes hivatkozás SYSLIB0047 figyelmeztetést fog eredményezni a létrehozáskor. Ha hibaként engedélyezte a figyelmeztetéseket, az buildtörést fog okozni, ha az alkalmazás hivatkozik XmlSecureResolverrá.

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

Előző viselkedés

A .NET-keretrendszerben XmlSecureResolver.GetEntity(Uri, String, Type) létrehoz egy Code Access Security (CAS) tesztkörnyezetet a külső XML-erőforrásfeloldási folyamat korlátozásához. Ha a szabályzatot megsértik, a SecurityException dobódik.

A .NET Core 3.1-ben és a .NET 6-ban XmlSecureResolver.GetEntity(Uri, String, Type) egyáltalán nem korlátozza a külső XML-erőforrások felbontását. A külső erőforrásfeloldás korlátozások nélkül engedélyezett.

Új viselkedés

A .NET 7-től XmlSecureResolver.GetEntity(Uri, String, Type) kezdve feltétel nélkül dob egy XmlException. Nem hoz létre CAS-tesztkörnyezetet, és nem próbálja meg feloldani a külső erőforrást.

Bevezetett verzió

.NET 7

A kompatibilitástörő változás típusa

Ez a módosítás hatással lehet a forráskompatibilitásra és a bináris kompatibilitásra.

A változás oka

Ez a változás javítja a .NET-ökoszisztéma biztonságát. Ez az elavulás a XmlSecureResolver működést a veszélyes meghibásodásról (mindig a megoldást végzi) hibabiztos működésre módosítja (soha nem végez megoldást), amikor a .NET 7-en vagy újabb verziókon fut.

Fontolja meg inkább az újonnan bevezetett statikus tulajdonság XmlResolver.ThrowingResolverhasználatát. Ez a tulajdonság egy olyan példányt XmlResolver biztosít, amely tiltja a külső erőforrásfeloldást.

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;

Érintett API-k