2009-07-16 19 views
30

Was ist der beste Weg, C# -Klassen aus mehreren XSD-Schema-Dateien zu generieren?Mehrere XSD-Schema-Dateien in C# -Klassen

Einige XSD-Schemadateien können eine Abhängigkeit von der anderen haben. Ich versuche zu vermeiden, dass doppelte C# -Klassen generiert werden.

Antwort

38

Verwenden Sie das XSD.EXE-Programm, aber übergeben Sie alle der Schemas an das Programm in derselben Befehlszeile.

Zum Beispiel:

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

Wird eine Klasse emittieren genannt:

qbxmltypes130_QBUqbxmlops130_QBUqbxmlso130_QBUqbxml130.cs 

In diesem Fall sind diese Quickbooks Desktop-SDK XSD-Dateien und die letzte Datei hat Typen es auf in der ersten abhängt 3 Dateien. Es wird nicht von selbst emittieren, aber mit seinen Abhängigkeiten funktioniert es wie gewünscht.

Beachten Sie, dass es einen /parameters:<file> Schalter gibt, mit dem Sie eine Datei mit Befehlszeilenparametern angeben können. Ich erinnere mich daran, es aus einem ähnlichen Grund in einem Projekt zu verwenden.

XSD.EXE doc hat das Parameterformat.

+2

Gerade das Hinzufügen eines Beispiel „xsd.exe/classes/n: {your_namespace} {} Datei1 .xsd {file2} .xsd {file3 } XSD/out: {Ausgabeordner}“ – vivekp

+0

Keine Notwendigkeit zur Erzeugung von C# -Klassen aus XSDs mit mehreren Referenzen von jetzt an Altova XML Spy zu verwenden. – Joset

+1

Eine letzte Ergänzung zu dem ausgezeichneten Beispiel @vivekp gab: Die letzte in der Sequenz genannte Datei scheint diejenige zu sein, die zum Generieren des Klassendateinamens verwendet wird. In diesem Beispiel würde die Klassendatei {Ihr Ausgabeordner} \ {file3} .cs – PellucidWombat

27

Ich für den einen fand die Beispiele in der MSDN doc ein bisschen fehlt. Hier ist ein Beispiel-Parameter-Datei für die Ausgabe beschrieben codemeit:

<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

Danke, @anony_mouse - Ich war auf der Suche nach einem guten Beispiel für diese Syntax! – ewall

+6

Wenn Sie den Fehler "angegebener Pfad oder Dateiname zu lang" erhalten, versuchen Sie, ein ". \" Vor der letzten Datei zu platzieren und das Problem wird behoben. Beachten Sie, dass die Ausgabedatei von der letzten Datei benannt wird. – Peter

+0

@ Peter WOW danke – dpant