Сравнение генераторов кода XSD [закрыто]
Я провожу некоторые исследования в области генерации кода из файлов схемы xsd. Мои требования:
- должен генерировать код C# 2.0 (или выше), используя универсальные коллекции, где это необходимо.
- должен генерировать комментарии из комментариев xsd
- должен генерировать полностью сериализуемый код.
- должен быть в состоянии генерировать resuable basetypes при генерации из нескольких xsd с тем же включает в себя.
(Смотрите также мои другие вопросы: как могу ли я создать несколько классов из xsd с общим включает в себя? и как я могу генерировать комментарии из тегов xs:documentation в wsdl?
Я нашел следующие варианты:
- использовать xsd.exe (поставляется вместе с SDK и Visual Studio)
- XSDCodeGen от Даниил Cazzulino
- Xsd2Code
- CodeXS
- XsdObjectGen by Microsoft
- XSDClassGen (кажется, отсутствует в действии)
Я что-нибудь пропустил? Потому что (1), (2) и (5) не генерируют код 2.0, и у меня есть проблемы с сериализацией кода из (3). Что вы используете при создании кода?
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
при необходимости выполните следующие действия для очистки сгенерированного кода:
- Regex replace-текущий проект, регистр, целое слово -[системы.Во время выполнения.Сериализация.Атрибут datacontractattribute(имя:Б*=б*:м,:бпространство имен: b=: b * {: q})] с [DataContract (Namespace = \1)]
- заменить текущий проект, дело, целое слово - [системы.Во время выполнения.Сериализация.DataMemberAttribute ()] С [DataMember]
- Regex replace-текущий проект, регистр, целое слово -
Я еще не проверял, но Linq2XSD может быть полезной альтернативой.
Я собираюсь дать этому выстрел. LINQ с генерацией XSD будет лучше, чем любой из этих инструментов, которые вы упомянули - при условии, что он работает хорошо.
проект с открытым исходным кодом XSD в классы работала идеально подходит для меня.
Я проект немного больше года назад мы использовали кодексы. С некоторыми незначительными корректировками (скрипт, который немного очистил сгенерированный код) он работал очарование.
есть еще Динго, которые имеют некоторые очень хорошие функции расширяемости (которые нам не нужны).
попробуйте OxmLibrary -http://oxmlibrary.codeplex.com
лучший генератор класса XSD, который я нашел, это thinktecture WSCF.синий . Это лучше, чем большинство других по двум причинам:
- исправления имен. Это означает оболочку и множественность типов и имен свойств.
- создает отдельный файл для каждого класса.
или, если вы ищете решение T4, вы можете попробовать XsdClassGen . Это не работает для меня. Но хорошей новостью является то, что это файл T4, так что это легко исправить!
вот веб-пример использования XSLT для преобразования XML в код C#. В примере используется модель (XML), которая описывает службы (в основном имена служб, пространства имен и список операций), а затем создает службы WCF (интерфейсы, сообщения, ошибки, тесты и т. д.) Все в C#.net.