У меня есть проект библиотеки классов, в котором размещен некоторый общий код между другими проектами в моем решении. Один из этих фрагментов общего кода включает запуск проверки XML для файла XSD. Имя XSD передается методу в качестве параметра, а затем загружается с использованием Assembly.GetFile()
.
Проблема в том, что XSD-файл импортирует два других XSD . Я загрузил все три ресурса в свою библиотеку классов, но из того, что я прочитал, xsd: import не будет работать. Существует ли альтернативный подход к обеспечению доступности этих XSD в моем проекте библиотеки классов без нарушения операторов xsd:import
?
Редактировать - Обновить
Я реализовал предложение Александра ниже, но, как я отмечал в своем комментарии, всякий раз, когда GetEntity()
вызывается для xs:import
'd XSD, ofObjectToReturn
равен null
. Это заставило первый экземпляр типа xs:import
создать исключение «тип не определен».
Чтобы решить эту проблему, я изменил GetEntity()
, чтобы он возвращал GetManifestResourceStream()
независимо от значения ofObjectToReturn
. Похоже, что теперь это работает для первого уровня операторов xs:import
, но дополнительный xs:import
внутри одного из оригинальных xs:import
XSD не работает. Я подтвердил, что GetEntity()
вызывается для этого вторичного xs:import
, но я получаю исключение "тип не определен" для типа, определенного в этом вторичном XSD.
- TopLevel.xsd - типы разрешают в порядке
- FirstLevelImport1.xsd - типы разрешаются в порядке
- FirstLevelImport2.xsd - типы разрешаются в порядке
- SecondLevelImport1.xsd - Исключение "тип не определен" для типа, определенного в этом XSD
Исключение «тип не определен» выдается во время XmlReader.Create()
, которому передано XmlReaderSettings
, определяющее проверку схемы.