共用方式為


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) 會建構程式碼存取安全性 (CAS) 沙箱,以限制外部 XML 資源解析程序。 如果違反原則,則會擲回 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