Проверка DTD в сборке 3.5 завершается неудачно при связывании в приложении с целью 4.6 - PullRequest
0 голосов
/ 16 мая 2018

У меня есть сборка, написанная на 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 Ответ

0 голосов
/ 21 мая 2018

Я решил эту проблему. Теперь я могу продолжать целевую версию 3.5 со своей сборкой, и когда она связана с приложением, нацеленным на 4.6 и выше, она все еще может проверять XML с DTD.

Мне пришлось явно установить XmlReaderSettings.XmlResolver в новый XmlUrlResolver (), чтобы он заработал. Я предполагаю, что, не устанавливая это в новый XmlUrlResolver (), инфраструктура 4.6 устанавливает его во время выполнения с распознавателем, который не разрешит проверку DTD.

...