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;