Проверка DTD в сборке 3.5 завершается неудачно при связывании в приложении, ориентированном на 4.6
У меня есть сборка, написанная на C#, которая выполняет проверку DTD для входной строки. Он использует XMLReaderSettings.ValidationTpe = ValidationType.DTD и XMLReaderSettings.ProhibitDtd = false. Проверка XML отлично работает при связывании этой сборки в приложениях, нацеленных на 2.0, 3.5, 4.0, 4.5, но когда приложение нацеливается на 4.6, оно больше не работает (обработка DTD становится запрещенной). Я знаю, что ProhibitDtd устарела в 4.0 в пользу DtdProcessing = DtdProcessing.Parse.
Я не могу использовать DtdProcessing.Parse, если не выбрал 4.0 для своей сборки. Мои вопросы: 1. Как я могу продолжить нацеливаться на 3.5 и заставить его работать в приложениях, нацеленных на 4.6 и выше? 2. Если мне нужно настроить таргетинг на 4.0, чтобы это работало, как это повлияет на приложение, ориентированное на 2.0 с использованием моей сборки 4.0?
1 ответ
Я решил эту проблему. Теперь я могу продолжать целевую версию 3.5 со своей сборкой, и когда она связана с приложением, ориентированным на 4.6 и выше, она все еще может проверять XML с помощью DTD.
Мне пришлось явно установить XmlReaderSettings.XmlResolver в новый XmlUrlResolver(), чтобы заставить его работать. Я предполагаю, что, не устанавливая это в новый XmlUrlResolver(), инфраструктура 4.6 устанавливает его во время выполнения с определителем, который не разрешит проверку DTD.