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:
- 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)]
- Remplacez - projet en cours, cas, tout le mot - [Système.Moment de l'exécution.La sérialisation.DataMemberAttribute()] avec [DataMember]
- Regex pour remplacer le projet actuel, cas, tout le mot - Système.Nullable\<{:w}> avec \1\?
- Regex remplacez - les documents ouverts, cas, tout le mot - {:w}TYPE avec \1
- Remplacez - les documents ouverts, cas, tout le mot - Système.DateTime avec DateTime, puis ajouter manquantes à l'aide des déclarations
- Remplacez - les documents ouverts, cas, tout le mot - [Système.Xml.La sérialisation.XmlIgnoreAttribute()] avec [XmlIgnore]
- Remplacez - projet en cours - Système.Xml.La sérialisation.XmlArrayAttribute avec XmlArray
- Remplacez - projet en cours - Système.Xml.La sérialisation.XmlArrayItemAttribute avec XmlArrayItem
- Regex pour remplacer - projet en cours - ,[:Wh]+/// \<remarques/\> avec ,
Espérons que l'aide à quelqu'un.