Создание файлов класса MULTIPLE на основе XSD - PullRequest
14 голосов
/ 11 июля 2011

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

У меня есть XSD-файл, который имеет несколько элементов (и несколько сложных типов), которые будут генерировать несколько классов в одном файле кода (мне это не нравится). Ради чистых и читаемых файлов классов, созданных с помощью инструмента XSD, я хотел бы, чтобы каждый элемент был помещен в отдельный файл кода, а не все были помещены в один файл кода как частичные классы.

Кто-нибудь знает, как это сделать? Или мое единственное решение - разбить XSD на одну схему для каждого из элементов xml в схеме?

В статье MSDN http://msdn.microsoft.com/en-us/library/x6c1kb0s(v=VS.100).aspx не указан язык, который определяет, можно ли это сделать.

Заранее спасибо за любые ответы или комментарии.

Ответы [ 2 ]

14 голосов
/ 12 июля 2011

Это не дает прямого ответа на ваш вопрос, но я хотел бы добавить пару вещей:

Обычно я считаю непродуктивным разделение сгенерированного кода.Мне всегда нравится следовать правилу «один класс на файл», но здесь я делаю исключение, потому что я часто имею дело с очень большими схемами.Даже в их собственном каталоге я не хочу, чтобы при создании новой версии кода мне приходилось различать десятки (до сотен) файлов.Мне очень удобно, чтобы весь сгенерированный код можно было преобразовать в один файл.

Теперь, чтобы предложить возможное решение - Resharper имеет возможность извлекать все классы из файла иположить их в свои файлы.Если щелкнуть правой кнопкой мыши файл в обозревателе решений, вы можете сказать: Refactor → Переместить типы в соответствующие файлы ... .Конечно, это не так удобно, как просто генерировать его таким образом, но я не знаю инструмента, который это сделает.

6 голосов
/ 23 июля 2014

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

Это простое исправление, но мне потребовалось много времени, чтобы понять. Вы должны использовать xsd.exe для компиляции всех ваших классов одновременно, поэтому вместо того, чтобы запускать две отдельные команды, вам просто нужно выполнить одну: C: \ Solution \ Project> xsd.exe Types.xsd Request.xsd Response.xsd / c Теперь у вас есть один файл Response.xsd со всеми тремя классами.

...