2012-04-25 2 views
1

У меня возникла проблема с генерацией кода с использованием xsd.exe (тот, который поставляется с .NET SDK), а также с Xsd2Code (http://xsd2code.codeplex.com/).Генерация кода XSD (C#) с xsd: включает

У меня есть следующие настройки из XSD файлов:

  • Common.xsd
  • Summary.xsd
  • Detail.xsd

Common определяет некоторые типы, которые используются в обоих Резюме и детали и, следовательно, как сводка, так и деталь включают строку <xs:include schemaLocation="Common.xsd" />.

Теперь проблема со всеми инструментами генерации кода XSD, которые я пробовал, заключается в том, что они принимают только файл XSD с типом верхнего уровня (так что сводка/подробности) и создают классы в пространстве имен ONE.

Проблема в том, что если я использую эти инструменты, я получаю 2 точных копии каждого типа в Common.xsd (Namespace.Summary.CommonType и Namespace.Detail.CommonType). Когда я хочу использовать их в коде, мне всегда приходится конвертировать между ними (в основном просто копировать все значения), и это довольно неприятно и приводит к довольно большому количеству накладных расходов и путанице.

Есть ли какой-нибудь инструмент генерации кода XSD, который обрабатывает лучше (т. Е. Помещает включенные типы в собственное пространство имен и только генерирует их один раз)?

ответ

1

Вы должны попытаться перечислить все файлы XSD в командной строке, это должно исправить вашу проблему для всех, кроме некоторых сценариев, которые, надеюсь, не будут применяться к вашему делу.

Пожалуйста, взгляните на this post, также на SO, он показывает, что именно вам нужно делать.

1

Xsd2Code обрабатывает этот сценарий, вам просто нужно запустить несколько проходов команды для каждого файла XSD, задает пространство имен ..

xsd2code Common.xsd MyNamespace MyNamespace\Common.cs 
xsd2code Summary.xsd MyNamespace MyNamespace\Summary.cs /eit+ 
xsd2code Detail.xsd MyNamespace MyNamespace\Detail.cs /eit+ 

Каждый файл XSD будет генерироваться в свой файл собственного исходного кода (опционально в разных пространствах имен). Переключатель/eit + указывает, что xsd2code не будет генерировать включенные типы схем в этот файл.

+1

Это было бы здорово, но коммутатор не работает вообще (хотя я добавил его, все же все включенные типы сгенерированы). – chrischu

+0

@chrischu - ваши xsd-файлы включены или импортированы? Существует тонкая разница, которая может вызывать xsd2code off ... – MattDavey

+0

Они включены (как показано в исходном вопросе). – chrischu

0

Следующий метод в Xsd2Code всегда возвращает истину:

Xsd2Code.Library.Extensions.CodeExtension.ContainsTypeName(XmlSchema schema, CodeTypeDeclaration type) 

Это предотвращает исключение включенных элементов XML-схемы.

Смежные вопросы