次の方法で共有


XmlSecureResolver は廃止されました

メソッド System.Xml.XmlSecureResolver.GetEntity(Uri, String, Type) は実行時に無条件で XmlException をスローします。 アプリケーションが XmlSecureResolver を利用し、それを介して XML リソースを解決しようとすると、解決は例外で失敗します。

さらに、 System.Xml.XmlSecureResolver 型全体が古くなっています。 この型への参照はすべて、ビルド時に SYSLIB0047 警告になります。 警告をエラーとして有効にした場合、アプリケーションが 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);

以前の動作

.NET Framework では、 XmlSecureResolver.GetEntity(Uri, String, Type) は外部 XML リソース解決プロセスを制限するコード アクセス セキュリティ (CAS) サンドボックスを構築します。 ポリシーに違反した場合は SecurityException がスローされます。

.NET Core 3.1 および .NET 6 では、 XmlSecureResolver.GetEntity(Uri, String, Type) は外部 XML リソース解決をまったく制限しません。 外部リソースの解決は、制限なしで続行できます。

新しい動作

.NET 7 以降、XmlSecureResolver.GetEntity(Uri, String, Type) からは無条件に XmlException がスローされます。 CAS サンドボックスは構築されず、外部リソースの解決も試みません。

導入されたバージョン

.NET 7

破壊的変更の種類

この変更は、ソースの互換性バイナリの互換性に影響する可能性があります。

変更の理由

この変更により、.NET エコシステムのセキュリティが向上します。 この非推奨化により、XmlSecureResolver の動作は、.NET 7 以降で実行されている場合に、フェールデンジャラス (常に解決を実行) からフェールセーフ (決して解決を実行しない) に移行します。

代わりに、新しく導入された静的プロパティ XmlResolver.ThrowingResolverを使用することを検討してください。 このプロパティは、外部リソース解決を禁止する XmlResolver インスタンスを提供します。

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