該方法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;