Сравнение генераторов кода XSD [закрыто]


Я провожу некоторые исследования в области генерации кода из файлов схемы xsd. Мои требования:

  • должен генерировать код C# 2.0 (или выше), используя универсальные коллекции, где это необходимо.
  • должен генерировать комментарии из комментариев xsd
  • должен генерировать полностью сериализуемый код.
  • должен быть в состоянии генерировать resuable basetypes при генерации из нескольких xsd с тем же включает в себя.

(Смотрите также мои другие вопросы: как могу ли я создать несколько классов из xsd с общим включает в себя? и как я могу генерировать комментарии из тегов xs:documentation в wsdl?

Я нашел следующие варианты:

  1. использовать xsd.exe (поставляется вместе с SDK и Visual Studio)
  2. XSDCodeGen от Даниил Cazzulino
  3. Xsd2Code
  4. CodeXS
  5. XsdObjectGen by Microsoft
  6. XSDClassGen (кажется, отсутствует в действии)

Я что-нибудь пропустил? Потому что (1), (2) и (5) не генерируют код 2.0, и у меня есть проблемы с сериализацией кода из (3). Что вы используете при создании кода?

7 73

7 ответов:

Я считаю XSD2Code является лучшим инструментом в настоящее время доступны (в 2011 году).

недавно я прошел через тот же процесс на работе по анализу доступных инструментов, поэтому я подумал, что дам обновленный ответ, который относится к VS2010.

наш главный драйвер был это xsd.exe не генерирует XML doc из аннотаций XSD, которые мы хотели, поскольку у нас есть сотни определений типов. Я попробовал все перечисленные инструменты выше, а также другие и большинство из них либо устарели, не поддерживается или не в состоянии соответствовать текущей функциональности xsd.exe доступен в VS2010.

Xsd2Code однако это превосходный инструмент и, кажется, активно поддерживается. Он предоставляет все функции, которые были перечислены выше, и многое другое - страница CodePlex также имеет отличные примеры того, как различные параметры влияют на вывод.

оно также имеет плотное против интеграции, включая интеграцию контекстного меню и пользовательский инструмент построения (это означает, что если вы ссылаетесь на XSDs в своем проекте и указываете пользовательский инструмент, он автоматически обновит код при обновлении XSD). В целом, это сэкономило нам много работы.

краткое резюме других инструментов, которые я посмотрел:

  • Динго - кажется, больше соответствует Java
  • XSDCodeGen-больше демо о том, как написать пользовательский инструмент сборки
  • CodeXS - вполне хороший инструмент, но меньше интеграции, функций и больше не поддерживается
  • XSDObjectGen-больше не поддерживается, меньше функциональности, чем текущий xsd.exe
  • XSDClassGen-не удалось найти его
  • библиотека OXM -рекомендую глядя на этот проект, поддерживается и большой функционал
  • LINQ to XSD - очень прохладный, но не то, что я искал ибо

дополнение: Если вы решили продолжить работу с XSD2Code, есть ряд проблем, которые я обнаружил, работая с инструментом командной строки. В частности, есть некоторые ошибки с обработкой аргументов, которые требуют, чтобы некоторые аргументы были в определенном порядке, а также некоторые недокументированные зависимости (например, автоматические параметры и версия .NET зависят от порядка). Ниже приведены шаги, которые я использовал для создания кода с помощью XSD2Code, а затем очистка вывода-возьмите биты, которые применяются к вам по мере необходимости:

запустите следующий пакетный файл для создания исходного кода, изменив пути к правильным местоположениям:

@echo off

set XsdPath=C:\schemas
set OutPath=%XsdPath%\Code
set ExePath=C:\Progra~1\Xsd2Code
set Namespace=InsertNamespaceHere

echo.Starting processing XSD files ...
for /f %%a IN ('dir %XsdPath%\*.xsd /a-d /b /s') do call:ProcessXsd %%a

echo.Finished processing XSD files ...
echo.&pause&
goto:eof

:ProcessXsd
%ExePath%\Xsd2Code %~1 %Namespace% %XsdPath%\Code\%~n1%.cs /pl Net35 /if- /dc /sc /eit
echo.Processed %~n1
goto:eof

при необходимости выполните следующие действия для очистки сгенерированного кода:

  1. Regex replace-текущий проект, регистр, целое слово -[системы.Во время выполнения.Сериализация.Атрибут datacontractattribute(имя:Б*=б*:м,:бпространство имен: b=: b * {: q})] с [DataContract (Namespace = \1)]
  2. заменить текущий проект, дело, целое слово - [системы.Во время выполнения.Сериализация.DataMemberAttribute ()] С [DataMember]
  3. Regex replace-текущий проект, регистр, целое слово -

Я еще не проверял, но Linq2XSD может быть полезной альтернативой.

Я собираюсь дать этому выстрел. LINQ с генерацией XSD будет лучше, чем любой из этих инструментов, которые вы упомянули - при условии, что он работает хорошо.

проект с открытым исходным кодом XSD в классы работала идеально подходит для меня.

Я проект немного больше года назад мы использовали кодексы. С некоторыми незначительными корректировками (скрипт, который немного очистил сгенерированный код) он работал очарование.

есть еще Динго, которые имеют некоторые очень хорошие функции расширяемости (которые нам не нужны).

попробуйте OxmLibrary -http://oxmlibrary.codeplex.com

лучший генератор класса XSD, который я нашел, это thinktecture WSCF.синий . Это лучше, чем большинство других по двум причинам:

  1. исправления имен. Это означает оболочку и множественность типов и имен свойств.
  2. создает отдельный файл для каждого класса.

или, если вы ищете решение T4, вы можете попробовать XsdClassGen . Это не работает для меня. Но хорошей новостью является то, что это файл T4, так что это легко исправить!

вот веб-пример использования XSLT для преобразования XML в код C#. В примере используется модель (XML), которая описывает службы (в основном имена служб, пространства имен и список операций), а затем создает службы WCF (интерфейсы, сообщения, ошибки, тесты и т. д.) Все в C#.net.