76 votes

Comparaison de XSD Générateurs de Code

Je suis en train de faire quelques recherches dans la génération de code à partir d'un schéma xsd fichiers. Mes exigences:

  • Doit générer des C# 2.0 (ou supérieur), de l'utilisation de générique des collections en cas de besoin.
  • Doit susciter des commentaires de la xsd commentaires
  • Doit générer entièrement serializable code.
  • Doit être capable de produire réutilisable basetypes lors de la génération de plusieurs xsd avec la même comprend.

(voir aussi mes autres questions: Comment puis-je créer plusieurs classes à partir d'un xsd avec la commune comprend? et Comment puis-je obtenir des commentaires du xs:documentation des balises dans un document wsdl?

J'ai trouvé les options suivantes:

  1. Utilisation xsd.exe (fourni avec le SDK et Visual Studio)
  2. XSDCodeGen de Daniel Cazzulino
  3. Xsd2Code
  4. CodeXS
  5. XsdObjectGen par Microsoft
  6. XSDClassGen (Semble être manquant dans l'action)

Ai-je raté un? Parce que (1), (2) et (5) ne génèrent pas de 2.0 code, et j'ai des problèmes avec la sérialisation de code à partir de (3). Qu'utilisez-vous lors de la génération de code?

62voto

Xcalibur Points 1312

Je crois XSD2Code est le meilleur outil actuellement disponible (en 2011).

J'ai récemment passés par le même processus à l'œuvre de l'analyse des outils disponibles là-bas donc j'ai pensé que je pourrais fournir une mise à jour de la réponse qui se rapporte à VS2010.

Notre principal moteur a été que xsd.exe ne génère pas de document XML à partir de la XSD annotations que nous avons voulu que nous avons des centaines de définitions de type. J'ai essayé tous les outils énumérés ci-dessus ainsi que d'autres, et la plupart sont soit obsolètes, entretenu ou incapable de répondre à la fonctionnalité actuelle de xsd.exe disponible dans VS2010.

Xsd2Code , cependant, est un outil superbe et semble être activement maintenu. Il fournit toutes les fonctionnalités énumérées ci-dessus et beaucoup plus - la CodePlex page a également de très bons exemples de la façon dont les diverses options qui affectent la sortie.

Il a également serré VS intégration, y compris l'intégration du menu contextuel et une version personnalisée de l'outil (ce qui signifie que si vous faites référence à la XSDs dans votre projet et spécifier l'outil personnalisé, il sera automatiquement mis à jour le code que vous mettez à jour le fichier XSD). Dans l'ensemble nous a épargné beaucoup de travail.

Un rapide résumé de la d'autres outils que j'ai regardé:

  • Dingo - Semble être plus en harmonie avec Java
  • XSDCodeGen - Plus d'une démonstration sur la façon d'écrire une version personnalisée de l'outil
  • CodeXS - Très bon outil, mais moins d'intégration, les fonctions et n'est plus maintenu
  • XSDObjectGen - N'est plus maintenu, moins de fonctionnalités que les xsd.exe
  • XSDClassGen - ne Pouvait pas localiser
  • OXM Bibliothèque - Recommander à la recherche à ce projet, maintenu et une grande fonctionnalité
  • LINQ to XSD - Très cool de projet, mais pas ce que je cherchais

Addendum: Si vous n'décidé d'aller de l'avant avec XSD2Code, il y a un certain nombre de questions que j'ai trouvé de travail avec l'outil de ligne de commande. En particulier, il y a quelques bugs avec l'argument de traitement qui nécessitent un peu d'arguments pour être dans un certain ordre en tant que bien que certains sans-papiers dépendances (eg - automatique des paramètres .La version NET de commande spécifique et dépendants). Voici les étapes que j'ai utilisé pour générer le code à l'aide de XSD2Code et puis nettoyage de la sortie - prendre les bits qui s'appliquent à vous:

Exécutez le fichier de commandes suivant pour générer le code initial, changer les chemins d'accès aux emplacements corrects:

@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

Effectuez les étapes suivantes pour nettoyer le code généré, en tant que de besoin:

  1. Regex pour remplacer le projet actuel, cas, tout le mot - [Système.Moment de l'exécution.La sérialisation.DataContractAttribute(Nom:b*=:b*:q,:b*espace de Noms:b*=:b*{:q})] avec [DataContract(Namespace = \1)]
  2. Remplacez - projet en cours, cas, tout le mot - [Système.Moment de l'exécution.La sérialisation.DataMemberAttribute()] avec [DataMember]
  3. Regex pour remplacer le projet actuel, cas, tout le mot - Système.Nullable\<{:w}> avec \1\?
  4. Regex remplacez - les documents ouverts, cas, tout le mot - {:w}TYPE avec \1
  5. Remplacez - les documents ouverts, cas, tout le mot - Système.DateTime avec DateTime, puis ajouter manquantes à l'aide des déclarations
  6. Remplacez - les documents ouverts, cas, tout le mot - [Système.Xml.La sérialisation.XmlIgnoreAttribute()] avec [XmlIgnore]
  7. Remplacez - projet en cours - Système.Xml.La sérialisation.XmlArrayAttribute avec XmlArray
  8. Remplacez - projet en cours - Système.Xml.La sérialisation.XmlArrayItemAttribute avec XmlArrayItem
  9. Regex pour remplacer - projet en cours - ,[:Wh]+/// \<remarques/\> avec ,

Espérons que l'aide à quelqu'un.

8voto

Simon_Weaver Points 31141

Je n'ai pas encore vérifié, mais Linq2XSD pourrait être une alternative utile.

Je vais donner à celui-ci un coup de feu. LINQ avec la génération XSD serait mieux que l'un de ces outils que vous avez mentionné - à condition qu'il fonctionne très bien.

3voto

Stef Points 1782

Projet OpenSource XSD pour les Classes ont travaillé parfait pour moi.

2voto

Steen Points 3427

J'ai un projet un peu plus d'un an, nous avons utilisé des CodeXS. Avec quelques ajustements (un script qui a nettoyé le code généré un peu), il a travaillé un charme.

Il y a aussi Dingo, qui ont de très bonnes fonctionnalités d'extensibilité (que nous n'avons pas besoin).

2voto

maor Points 76

Essayez OxmLibrary - http://oxmlibrary.codeplex.com

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X