1

我有一个用 c# 编写的程序集,它对输入字符串进行 DTD 验证。它使用 XMLReaderSettings.ValidationTpe = ValidationType.DTD 和 XMLReaderSettings.ProhibitDtd = false。在以 2.0、3.5、4.0、4.5 为目标的应用程序中链接此程序集时,XML 验证工作正常,但当应用程序以 4.6 为目标时,它不再工作(DTD 处理被禁止)。我知道 ProhibitDtd 在 4.0 中已被弃用,取而代之的是 DtdProcessing = DtdProcessing.Parse。

我不能使用 DtdProcessing.Parse,除非我的程序集目标为 4.0。我的问题是: 1. 我怎样才能继续以 3.5 为目标并让它在以 4.6 及更高版本为目标的应用程序中工作?2. 如果我必须以 4.0 为目标才能使其工作,这将如何影响使用我的 4.0 程序集以 2.0 为目标的应用程序?

4

1 回答 1

0

我已经解决了这个问题。我现在可以继续使用我的程序集以 3.5 为目标,并且当它链接到以 4.6 及更高版本为目标的应用程序时,它仍然能够使用 DTD 验证 XML。

我必须将 XmlReaderSettings.XmlResolver 显式设置为新的 XmlUrlResolver() 才能使其正常工作。我猜如果不将其设置为新的 XmlUrlResolver(),4.6 框架会在运行时使用不允许 DTD 验证的解析器设置它。

于 2018-05-21T14:15:47.140 回答