Я вважаю, що XSD2Code - найкращий доступний на даний момент інструмент (у 2011 році).
Нещодавно я пройшов той самий процес під час аналізу наявних інструментів, тому я думав, що надам оновлену відповідь, яка стосується VS2010 .
Нашим головним драйвером було те, що xsd.exe не генерує XML-документ із анотацій XSD, чого ми і хотіли, оскільки маємо сотні визначень типів. Я спробував усі перелічені вище інструменти, а також інші, і більшість із них були застарілими, не підтримувались або не могли відповідати поточній функціональності xsd.exe, доступній у VS2010.
Однак Xsd2Code є чудовим інструментом і, здається, активно підтримується. Він надає всі перелічені вище функції та багато іншого - на сторінці CodePlex також є чудові приклади того, як різні параметри впливають на вихід.
Він також має щільну інтеграцію VS, включаючи інтеграцію контекстного меню та спеціальний інструмент побудови (що означає, що якщо ви посилаєтесь на XSD у своєму проекті та вказуєте спеціальний інструмент, він автоматично оновлюватиме код під час оновлення 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
За потреби виконайте наступні дії, щоб привести в порядок згенерований код:
- Замінити регулярний вираз - поточний проект, випадок, ціле слово - [System.Runtime.Serialization.DataContractAttribute (Ім'я: b * =: b *: q ,: b Простір імен: b =: b * {: q})] на [DataContract ( Простір імен = \ 1)]
- Замінити - поточний проект, регістр, ціле слово - [System.Runtime.Serialization.DataMemberAttribute ()] на [DataMember]
- Замінити регулярний вираз - поточний проект, регістр, ціле слово - System.Nullable \ <{: w}> на \ 1 \?
- Заміна регулярного виразу - відкрити документи, регістр, ціле слово - {: w} ТИП на \ 1
- Замінити - відкрити документи, регістр, ціле слово - System.DateTime на DateTime , а потім додати відсутні за допомогою операторів
- Замінити - відкрити документи, регістр, ціле слово - [System.Xml.Serialization.XmlIgnoreAttribute ()] на [XmlIgnore]
- Замінити - поточний проект - System.Xml.Serialization.XmlArrayAttribute з XmlArray
- Замінити - поточний проект - System.Xml.Serialization.XmlArrayItemAttribute з XmlArrayItem
- Замінити регулярний вираз - поточний проект - , [: Wh] + /// \ <зауваження / \> на ,
Надія, що комусь допомагає.