Ich glaube, XSD2Code ist das derzeit beste verfügbare Tool (2011).
Ich habe kürzlich den gleichen Prozess bei der Analyse der verfügbaren Tools durchlaufen, sodass ich dachte, ich würde eine aktualisierte Antwort geben, die sich auf VS2010 bezieht .
Unser Haupttreiber war, dass xsd.exe kein XML-Dokument aus den XSD-Annotationen generiert, die wir wollten, da wir Hunderte von Typdefinitionen haben. Ich habe alle oben aufgeführten und andere Tools ausprobiert und die meisten waren entweder veraltet, nicht gewartet oder konnten nicht mit der aktuellen Funktionalität von xsd.exe in VS2010 übereinstimmen.
Xsd2Code ist jedoch ein hervorragendes Tool und scheint aktiv gewartet zu werden. Es bietet alle oben aufgeführten Funktionen und vieles mehr. Auf der CodePlex-Seite finden Sie auch hervorragende Beispiele dafür, wie sich die verschiedenen Optionen auf die Ausgabe auswirken.
Es verfügt außerdem über eine enge VS-Integration, einschließlich der Integration von Kontextmenüs und eines benutzerdefinierten Build-Tools (dh wenn Sie auf die XSDs in Ihrem Projekt verweisen und das benutzerdefinierte Tool angeben, wird der Code beim Aktualisieren der XSD automatisch aktualisiert). Alles in allem haben wir viel Arbeit gespart.
Eine kurze Zusammenfassung der anderen Tools, die ich mir angesehen habe:
- Dingo - Scheint mehr auf Java ausgerichtet zu sein
- XSDCodeGen - Eher eine Demo zum Schreiben eines benutzerdefinierten Build-Tools
- CodeXS - Ein ziemlich gutes Tool, aber weniger Integration, Funktionen und nicht mehr gewartet
- XSDObjectGen - Nicht mehr gewartet, weniger Funktionalität als die aktuelle xsd.exe
- XSDClassGen - Konnte es nicht finden
- OXM-Bibliothek - Empfehlen Sie einen Blick auf dieses Projekt, gepflegt und mit hervorragender Funktionalität
- LINQ to XSD - Sehr cooles Projekt, aber nicht das, wonach ich gesucht habe
Nachtrag:
Wenn Sie sich für XSD2Code entschieden haben, gibt es eine Reihe von Problemen, die bei der Arbeit mit dem Befehlszeilentool aufgetreten sind. Insbesondere gibt es einige Fehler bei der Argumentverarbeitung, bei denen einige Argumente in einer bestimmten Reihenfolge vorliegen müssen, sowie einige nicht dokumentierte Abhängigkeiten (z. B. - automatische Parameter und die .NET-Version sind auftragsspezifisch und abhängig). Die folgenden Schritte wurden ausgeführt, um den Code mit XSD2Code zu generieren und dann die Ausgabe zu bereinigen. Nehmen Sie die für Sie zutreffenden Bits nach Bedarf:
Führen Sie die folgende Batchdatei aus, um den Anfangscode zu generieren, und ändern Sie die Pfade zu den richtigen Speicherorten:
@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
Führen Sie die folgenden Schritte aus, um den generierten Code nach Bedarf aufzuräumen:
- Regex ersetzen - aktuelles Projekt, Fall, ganzes Wort - [System.Runtime.Serialization.DataContractAttribute (Name: b * =: b *: q ,: b Namespace: b =: b * {: q})] durch [DataContract ( Namespace = \ 1)]
- Ersetzen - aktuelles Projekt, Fall, ganzes Wort - [System.Runtime.Serialization.DataMemberAttribute ()] durch [DataMember]
- Regex ersetzen - aktuelles Projekt, Fall, ganzes Wort - System.Nullable \ <{: w}> durch \ 1 \?
- Regex ersetzen - offene Dokumente, Groß- und Kleinschreibung, ganzes Wort - {: w} TYPE mit \ 1
- Ersetzen - Öffnen Sie Dokumente, Groß- und Kleinschreibung, ganzes Wort - System.DateTime durch DateTime und fügen Sie dann fehlende Anweisungen hinzu
- Ersetzen - Dokumente, Groß- und Kleinschreibung, ganzes Wort öffnen - [System.Xml.Serialization.XmlIgnoreAttribute ()] durch [XmlIgnore]
- Ersetzen Sie - aktuelles Projekt - System.Xml.Serialization.XmlArrayAttribute durch XmlArray
- Ersetzen Sie - aktuelles Projekt - System.Xml.Serialization.XmlArrayItemAttribute durch XmlArrayItem
- Regex ersetzen - aktuelles Projekt - , [: Wh] + /// \ <Bemerkungen / \> durch ,
Hoffe das hilft jemandem.