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

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

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

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

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

Используйте xsd.exe (поставляется с SDK и Visual Studio)XSDCodeGen отДаниэль КаззулиноXsd2CodeCodeXSXsdObjectGen MicrosoftXSDClassGen (Кажется, отсутствует в действии)

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

 John Kraft02 сент. 2009 г., 05:09
Какие проблемы у вас были с Xsd2Code? У меня не было никаких проблем с этим.
 Greg Domjan30 дек. 2009 г., 22:56
на 5)stackoverflow.com/questions/607085/... имеет ссылку XSDObjectGen 2.0 на источник

Ответы на вопрос(7)

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

Исправлены названия. Это означает регистр и плюризацию типов и имен свойств.Создает отдельный файл для каждого класса.

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

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

 emcoding29 июл. 2019 г., 10:49
Веб-сайт больше не доступен, и ваш ответ также не полезен.

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

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

 cederlof15 окт. 2013 г., 17:29
Не работает с Visual Studio 2012.
 Simon_Weaver03 мар. 2011 г., 02:05
Я использую его пару лет. У этого есть некоторые огромные преимущества по сравнению с другими технологиями сущностей, и я думаю, что это настоящий позор. MS отказалась от него.
 Simon_Weaver14 июл. 2009 г., 03:47
не слишком переживайте, это «мертвый проект». если он в значительной степени завершен и работает, то он не «мертв» - он работает! мне кажется пока все в порядке
 Lanceomagnifico02 мар. 2011 г., 10:22
В настоящее время я успешно использую Linq to Xsd в активном проекте. Кажется, это самый «полный» xsd для сопоставления классов, который я нашел. Я пытался использовать Xsd2Code, но он не очень хорошо отображал сложные типы xsd - у меня было ограничение xs: pattern, которое идеально отображается в Linq на Xsd, но отсутствует в Xsd2Code. Верхний совет - загрузите исходный код Linq в Xsd - он содержит целую кучу документов и примеров проектов, которые не перечислены на вкладке «документы» в codeplex -Скачать здесь

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

Решение Вопроса

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

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

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

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

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

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

Динго - Кажется, чтобы быть более согласованным с JavaXSDCodeGen - больше демонстрации о том, как написать собственный инструмент для сборкиCodeXS - Довольно хороший инструмент, но меньше интеграции, функций и больше не поддерживаетсяXSDObjectGen - больше не поддерживается, меньше функциональности, чем текущий xsd.exeXSDClassGen - не удалось найти егоБиблиотека ОХМ - Рекомендую глядя на этот проект, поддерживается и отличная функциональность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 - текущий проект, кейс, целое слово -[System.Runtime.Serialization.DataContractAttribute (Имя: б * =: б *: д,: ЬПространство имен: б=: b * {: q})] с помощью [DataContract (Namespace = \ 1)]Заменить - текущий проект, случай, целое слово -[System.Runtime.Serialization.DataMemberAttribute ()] с[DataMember]Regex replace - текущий проект, кейс, целое слово -System.Nullable \ <{:} ш> с\ 1 \?Regex заменить - открыть документы, дело, целое слово -{: Ш} ТИП с\ 1Заменить - открыть документы, дело, целое слово -System.DateTime сDateTimeзатем добавьте пропущенные операторыЗаменить - открыть документы, дело, целое слово -[System.Xml.Serialization.XmlIgnoreAttribute ()] с[XmlIgnore]Заменить - текущий проект -System.Xml.Serialization.XmlArrayAttribute сXmlArrayЗаменить - текущий проект -System.Xml.Serialization.XmlArrayItemAttribute сXmlArrayItemRegex заменить - текущий проект -, [: Wh] + /// \ <remarks / \> с,

Надеюсь, что это помогает кому-то.

 Mirek16 мая 2018 г., 13:11
Xsd2Code больше не является бесплатным
 Grault12 нояб. 2015 г., 00:03
Надстройка не будет работать в VS2015 (потому что это надстройка), но библиотека DLL все еще совместима.
 InfantPro'Aravind'12 мар. 2013 г., 10:08
ДобавленоSchalk Versteeg как редактировать:XSDtoClasses code.google.com/p/xsd-to-classes - Extendable VS plugin, very similar in capabilities to XSD2Code.
 AaronLS01 апр. 2014 г., 22:16
Я бы добавил, что он неправильно обрабатывает атрибуты, а вместо этого обрабатывает их так же, как элементы. Существуют обходные пути для контрактов данных для реализации поддержки атрибутов xml, которые вам придется обрабатывать вручную:stackoverflow.com/questions/4858798/...
 Marc Roussel13 сент. 2017 г., 11:56
Довожу до вашего сведения :marketplace.visualstudio.com/...  Интеграция с 5 звездами Xsd2Code 2015 и 2017 имеет все опции, которые нам нужны в диалоге, и очень хорошо генерирует наш xml.
 womp15 июл. 2011 г., 18:15
xsd2code кажется мертвым. Я надеюсь, что выйдет новая версия, есть серьезная ошибка блокировки и пара других ошибок, которые не позволяют нам использовать это реально.
 Clint StLaurent05 нояб. 2015 г., 15:56
Ноябрь 2015 - сайт xsd2code все еще работает, но пробные лицензии не выдаются, и электронное письмо на сайт отскакивает. Нет обновлений с января. Я думаю, что этот продавец отказался от продукта.
 AaronLS01 апр. 2014 г., 20:11
Параметр контракта данных/dc не работал на меня, пока я не использовал именно эту комбинацию и порядок параметров в этом посте:/pl Net35 /if- /dc /sc
 cederlof15 окт. 2013 г., 17:31
XSD2Code не работает для Visual Studio 2012.
 devuxer29 окт. 2011 г., 00:37
Просто примечание: я наткнулся на XsdClassGen на Nuget (см.nuget.org/List/Packages/XsdClassGen). Он использует шаблон T4, что приятно, но очень примитивно.
 Stephen Patten28 апр. 2011 г., 01:21
Я должен согласиться, что Xsd2Code в настоящее время является чемпионом. Просто следите за тем, чтобы надстройка не загружалась правильно, если вы переместили папку «Документы» по умолчанию, либо вручную, либо через объект групповой политики. Решение состоит в том, чтобы взять файл надстройки из места установки и поместить его в папку Documents \ Visual Studio 2010 \ Addins \.

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

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

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

Ваш ответ на вопрос