2009-07-16 6 views
30

Quelle est la meilleure façon de générer des classes C# à partir de plusieurs fichiers de schéma XSD?Plusieurs fichiers de schéma XSD dans des classes C#

Certains fichiers de schéma XSD peuvent avoir une dépendance à l'autre, je suis en train d'éviter les classes dupliquées C# générés.

Répondre

38

Utilisez le programme XSD.EXE, mais transmettez tous les des schémas au programme sur la même ligne de commande.

Par exemple:

> xsd /c qbxmltypes130.xsd QBUqbxmlops130.xsd QBUqbxmlso130.xsd QBUqbxml130.xsd 

émettra une classe nommée:

qbxmltypes130_QBUqbxmlops130_QBUqbxmlso130_QBUqbxml130.cs 

Dans ce cas, ceux-ci sont QuickBooks bureau SDK fichiers XSD et le fichier final a des types dont il dépend en premier 3 fichiers. Il n'émettra pas seul, mais avec ses dépendances, il fonctionne comme vous le souhaitez.

Notez qu'il existe un interrupteur /parameters:<file> qui vous permet de spécifier un fichier de paramètres de ligne de commande. Je me souviens de l'avoir utilisé dans un projet pour une raison similaire.

XSD.EXE doc a le format des paramètres.

+2

Il suffit d'ajouter un exemple « XSD.exe/classes/n: {} {your_namespace fichier1} {xsd fichier2} {xsd file3 } .xsd/out: {votre dossier de sortie} " – vivekp

+0

Inutile d'utiliser Altova XML Spy pour générer des classes C# à partir de XSD avec plusieurs références à partir de maintenant. – Joset

+1

Un dernier ajout à l'excellent exemple @vivekp a donné: Le dernier fichier nommé dans la séquence semble être celui utilisé pour générer le nom du fichier de classe. Donc, son exemple produirait le fichier de classe {votre dossier de sortie} \ {fichier3} .cs – PellucidWombat

27

I pour un trouvé des exemples dans le doc MSDN un peu défaut. Voici un exemple de fichier des paramètres pour la question codemeit décrit:

<xsd xmlns='http://microsoft.com/dotnet/tools/xsd/'> 
<generateClasses language='CS' namespace='Namespace.subnamespace'> 
    <schema>FirstSchema.xsd</schema> 
    <schema>AnotherSchema.xsd</schema> 
    <schema>LastSchema.xsd</schema> 
</generateClasses> 
</xsd> 
+1

Merci, @anony_mouse - Je cherchais un bon exemple de cette syntaxe! – ewall

+6

si vous obtenez l'erreur « nom de chemin ou fichier spécifié trop long » essayez de placer un «\ » Infront du dernier fichier et il résout le problème, notez que le fichier de sortie sera alors nommé par le dernier fichier .. – Peter

+0

@ Peter WOW merci – dpant

Questions connexes