XmlSecureResolver är föråldrad
Metoden System.Xml.XmlSecureResolver.GetEntity(Uri, String, Type) genererar villkorslöst en XmlException vid körning. Om programmet använder XmlSecureResolver och du försöker lösa en XML-resurs via den misslyckas lösningen med ett undantag.
Dessutom är hela System.Xml.XmlSecureResolver typen föråldrad. Alla referenser till den här typen resulterar i en SYSLIB0047 varning vid bygget. Om du har aktiverat varningar som fel orsakar detta en byggpaus om programmet refererar till 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 run time.
object entity = resolver.GetEntity(
absoluteUri: new Uri("https://www.example.com/some-entity"),
role: null,
ofObjectToReturn: null);
Tidigare beteende
I .NET Framework XmlSecureResolver.GetEntity(Uri, String, Type) skapar en CAS-sandbox (Code Access Security) för att begränsa den externa XML-resursmatchningsprocessen. Om principen överträds utlöses en SecurityException .
I .NET Core 3.1 och .NET 6 XmlSecureResolver.GetEntity(Uri, String, Type) begränsar inte den externa XML-resursmatchningen alls. Extern resursmatchning tillåts fortsätta utan begränsningar.
Nytt beteende
Från och med .NET 7 XmlSecureResolver.GetEntity(Uri, String, Type) genererar villkorslöst en XmlException. Den konstruerar inte en CAS-sandbox-miljö och försöker inte lösa den externa resursen.
Version introducerad
.NET 7
Typ av icke-bakåtkompatibel ändring
Den här ändringen kan påverka källkompatibilitet och binär kompatibilitet.
Orsak till ändringen
Den här ändringen förbättrar säkerheten för .NET-ekosystemet. Den här obsoletionen flyttar beteendet XmlSecureResolver från felfarlig (utför alltid upplösning) till felsäker (utför aldrig upplösning) när den körs på .NET 7 eller senare.
Rekommenderad åtgärd
Överväg i stället att använda den nyligen introducerade statiska egenskapen XmlResolver.ThrowingResolver. Den här egenskapen tillhandahåller en XmlResolver instans som förbjuder extern resursmatchning.
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;