XmlSecureResolver est obsolète

La méthode System.Xml.XmlSecureResolver.GetEntity(Uri, String, Type) lève inconditionnellement une XmlException au moment de l’exécution. Si votre application utilise XmlSecureResolver et que vous tentez de résoudre une ressource XML par le biais de celle-ci, la résolution échoue avec une exception.

En outre, le type System.Xml.XmlSecureResolver entier est obsolète. Toutes les références à ce type entraînent un avertissement SYSLIB0047 au moment de la génération. Si vous avez activé les avertissements en tant qu’erreurs, cela entraîne un arrêt de génération si votre application fait référence à 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);

Comportement précédent

Dans .NET Framework, XmlSecureResolver.GetEntity(Uri, String, Type) construit un bac à sable CAS (Code Access Security) pour restreindre le processus de résolution des ressources XML externes. Si la stratégie est violée, une SecurityException est levée.

Dans .NET Core 3.1 et .NET 6, XmlSecureResolver.GetEntity(Uri, String, Type) ne restreint pas du tout la résolution des ressources XML externes. La résolution des ressources externes est autorisée sans aucune limitation.

Nouveau comportement

À partir de .NET 7, XmlSecureResolver.GetEntity(Uri, String, Type) lève inconditionnellement une XmlException. Il ne construit pas de bac à sable CAS et ne tente pas de résoudre la ressource externe.

Version introduite

.NET 7

Type de changement cassant

Cette modification peut affecter la compatibilité des sources et la compatibilité binaire.

Raison du changement

Cette modification améliore la sécurité de l’écosystème .NET. Cette obsolescence change le comportement de XmlSecureResolver de fail-dangerous (toujours effectuer la résolution) à fail-safe (ne jamais effectuer de résolution) lors de l’exécution sur .NET 7 ou version ultérieure.

Envisagez plutôt d’utiliser la propriété statique XmlResolver.ThrowingResolver nouvellement introduite. Cette propriété fournit une instance XmlResolver qui interdit la résolution de ressources externes.

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;

API affectées