共用方式為


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 runtime.
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 生態系統的安全性。 這項已過時的變更在 .NET 7 或更新版本上執行時,將XmlSecureResolver的行為從失敗危險(一律執行解析)移至安全失效(永不執行解析)。

請考慮改用新引進的靜態屬性 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