Ответ 1
Я считаю, XSD2Code - лучший инструмент, доступный в настоящее время (в 2011 году).
Недавно я прошел один и тот же процесс на работе по анализу доступных инструментов, поэтому я подумал, что дам обновленный ответ, относящийся к VS2010.
Наш главный драйвер заключался в том, что xsd.exe не создает XML-документ из аннотаций XSD, который мы хотели, поскольку у нас есть сотни определений типов. Я пробовал все перечисленные выше инструменты, а также другие, и большинство из них были либо устаревшими, либо невосстановленными, либо неспособными соответствовать текущим функциям xsd.exe, доступным в VS2010.
Xsd2Code, однако, является превосходным инструментом и, похоже, активно поддерживается. Он предоставляет все функциональные возможности, перечисленные выше, и многое другое. На странице CodePlex также есть отличные примеры того, как различные параметры влияют на вывод.
Он также имеет жесткую интеграцию VS, включая интеграцию контекстного меню и инструмент пользовательской сборки (это означает, что если вы ссылаетесь на XSD в своем проекте и указываете настраиваемый инструмент, он автоматически обновляет код при обновлении XSD). В целом нам удалось много работать.
Краткое резюме других инструментов, на которые я смотрел:
- Dingo - кажется, что он больше связан с Java
- XSDCodeGen - больше демонстраций о том, как написать пользовательский инструмент сборки
- CodeXS - Довольно хороший инструмент, но меньше интеграции, функции и больше не поддерживаются
- XSDObjectGen - больше не поддерживается, меньше функциональности, чем текущий xsd.exe
- XSDClassGen - Не удалось найти его
- Библиотека OXM - Рекомендовать, глядя на этот проект, поддерживая и отличную функциональность
- LINQ to XSD - проект cool, но не тот, который я искал
Добавление: Если вы решили продолжить 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 - текущий проект, case, whole word - [System.Runtime.Serialization.DataContractAttribute(имя: b * =: b *: q,: bNamespace: b =: b * {: q}) ] с [DataContract (пространство имен =\1)]
- Заменить - текущий проект, случай, целое слово - [System.Runtime.Serialization.DataMemberAttribute()] с [DataMember]
- Regex replace - текущий проект, case, whole word - System.Nullable\< {: w} > с \1 \?
- Regex replace - открыть документы, case, whole word - {: w} TYPE с \1
- Заменить - открыть документы, дело, целое слово - System.DateTime с DateTime, а затем добавить отсутствующие с помощью операторов
- Заменить - открыть документы, регистр, целое слово - [System.Xml.Serialization.XmlIgnoreAttribute()] с [XmlIgnore]
- Заменить - текущий проект - System.Xml.Serialization.XmlArrayAttribute с XmlArray
- Заменить - текущий проект - System.Xml.Serialization.XmlArrayItemAttribute с XmlArrayItem
- Regex replace - текущий проект - , [: Wh] +///\ < примечания /\ > с ,
Надеюсь, что это поможет кому-то.