Vergleich von XSD-Codegeneratoren [geschlossen]

76

Ich recherchiere in der Codegenerierung aus xsd-Schemadateien. Meine Anforderungen:

  • Muss C # 2.0-Code (oder höher) generieren und bei Bedarf generische Sammlungen verwenden.
  • Muss Kommentare aus den xsd-Kommentaren generieren
  • Muss vollständig serialisierbaren Code generieren.
  • Sollte in der Lage sein, wiederverwendbare Basetypen zu generieren, wenn aus mehreren xsds mit denselben Includes generiert wird.

(Siehe auch meine anderen Fragen: Wie kann ich mehrere Klassen aus xsds mit allgemeinen Includes generieren ? und wie kann ich Kommentare aus xs: Dokumentations-Tags in einer wsdl generieren?

Ich habe folgende Optionen gefunden:

  1. Verwenden Sie xsd.exe (im Lieferumfang des SDK und von Visual Studio enthalten).
  2. XSDCodeGen von Daniel Cazzulino
  3. Xsd2Code
  4. CodeXS
  5. XsdObjectGen von Microsoft
  6. XSDClassGen (Scheint in Aktion zu fehlen)

Habe ich welche vermisst? Weil (1), (2) und (5) keinen 2.0-Code generieren und ich Probleme mit der Serialisierung von Code aus (3) habe. Was verwenden Sie beim Generieren von Code?

edosoft
quelle
Welche Probleme hatten Sie mit Xsd2Code? Ich hatte keine Probleme damit.
John Kraft
am 5) stackoverflow.com/questions/607085/… hat 2.0 XSDObjectGen Link zur Quelle
Greg Domjan

Antworten:

62

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:

  1. Regex ersetzen - aktuelles Projekt, Fall, ganzes Wort - [System.Runtime.Serialization.DataContractAttribute (Name: b * =: b *: q ,: b Namespace: b =: b * {: q})] durch [DataContract ( Namespace = \ 1)]
  2. Ersetzen - aktuelles Projekt, Fall, ganzes Wort - [System.Runtime.Serialization.DataMemberAttribute ()] durch [DataMember]
  3. Regex ersetzen - aktuelles Projekt, Fall, ganzes Wort - System.Nullable \ <{: w}> durch \ 1 \?
  4. Regex ersetzen - offene Dokumente, Groß- und Kleinschreibung, ganzes Wort - {: w} TYPE mit \ 1
  5. Ersetzen - Öffnen Sie Dokumente, Groß- und Kleinschreibung, ganzes Wort - System.DateTime durch DateTime und fügen Sie dann fehlende Anweisungen hinzu
  6. Ersetzen - Dokumente, Groß- und Kleinschreibung, ganzes Wort öffnen - [System.Xml.Serialization.XmlIgnoreAttribute ()] durch [XmlIgnore]
  7. Ersetzen Sie - aktuelles Projekt - System.Xml.Serialization.XmlArrayAttribute durch XmlArray
  8. Ersetzen Sie - aktuelles Projekt - System.Xml.Serialization.XmlArrayItemAttribute durch XmlArrayItem
  9. Regex ersetzen - aktuelles Projekt - , [: Wh] + /// \ <Bemerkungen / \> durch ,

Hoffe das hilft jemandem.

Xcalibur
quelle
2
Ich muss zustimmen, dass Xsd2Code derzeit der Champion ist. Achten Sie darauf, dass das Add-In nicht korrekt geladen wird, wenn Sie Ihren Standardspeicherort für Dokumente manuell oder über ein Gruppenrichtlinienobjekt verschoben haben. Die Lösung besteht darin, die Add-In-Datei vom Installationsort abzurufen und im Ordner Documents \ Visual Studio 2010 \ Addins \ abzulegen.
Stephen Patten
1
xsd2code scheint tot zu sein. Ich hoffe, dass eine neue Version in Kürze erscheint. Es gibt einen großen Blockierungsfehler und einige andere Fehler, die uns daran hindern, diese realistisch zu nutzen.
Womp
Nur eine Anmerkung: Ich bin auf Nuget auf XsdClassGen gestoßen (siehe nuget.org/List/Packages/XsdClassGen ). Es verwendet eine T4-Vorlage, was nett ist, aber sehr primitiv.
Devuxer
2
Hinzugefügt von Schalk Versteegals edit: XSDtoClasses code.google.com/p/xsd-to-classes -Extendable VS plugin, very similar in capabilities to XSD2Code.
InfantPro'Aravind '12.
3
XSD2Code funktioniert nicht für Visual Studio 2012.
Cederlof
9

Ich habe dies noch nicht überprüft, aber Linq2XSD könnte eine nützliche Alternative sein.

Ich werde es versuchen. LINQ mit XSD-Generierung wäre besser als jedes dieser von Ihnen erwähnten Tools - vorausgesetzt, es funktioniert gut.

Simon_Weaver
quelle
5
Sei nicht zu besorgt, es ist ein "totes Projekt". Wenn es ziemlich vollständig ist und funktioniert, dann ist es nicht "tot" - es funktioniert! scheint mir bisher in
Ordnung zu sein
2
Ich verwende derzeit erfolgreich Linq to Xsd in einem aktiven Projekt. Es scheint der 'vollständigste' xsd to class Mapper zu sein, den ich gefunden habe. Ich habe versucht, Xsd2Code zu verwenden, aber die komplexen Typen von xsd wurden nicht sehr gut zugeordnet. Ich hatte eine xs: -Mustereinschränkung, die in Linq perfekt auf Xsd abgebildet ist, aber in Xsd2Code fehlt. Top Tipp - Laden Sie die Quelle für Linq auf Xsd herunter - es gibt eine ganze Reihe von Dokumenten und Beispielprojekten, die nicht auf der Registerkarte "Dokumente" von Codeplex aufgeführt sind - hier herunterladen
Lanceomagnifico
3
Ich benutze es jetzt seit ein paar Jahren. Es hat einige enorme Vorteile gegenüber anderen Entitätstechnologien, und ich denke, es ist eine echte Schande, dass MS es aufgegeben hat
Simon_Weaver
Funktioniert nicht mit Visual Studio 2012.
Cederlof
Ich benutze es immer noch! (Nicht für neue Sachen, aber es funktioniert immer noch unter .NET Core).
Simon_Weaver
2

Bei einem Projekt vor etwas mehr als einem Jahr haben wir CodeXS verwendet. Mit einigen geringfügigen Anpassungen (ein Skript, das den generierten Code ein wenig bereinigt) hat es einen Reiz.

Es gibt auch Dingo , die einige sehr gute Erweiterungsfunktionen haben (die wir nicht brauchten).

Steen
quelle
0

Der beste XSD-Klassengenerator, den ich gefunden habe, ist thinktecture WSCF.blue . Es ist aus zwei Gründen schöner als die meisten anderen:

  1. Behebt die Benennung. Das bedeutet, dass Typen und Eigenschaftsnamen umhüllt und plurisiert werden.
  2. Erstellt für jede Klasse eine separate Datei.

Wenn Sie nach einer T4-Lösung suchen, können Sie XsdClassGen ausprobieren . Dieser arbeitet nicht für mich. Aber die gute Nachricht ist, dass es sich um eine T4-Datei handelt, die leicht zu reparieren ist!

Josh Mouch
quelle
-2

Hier ist ein webbasiertes Beispiel für die Verwendung von XSLT zur Umwandlung von XML in C # -Code. In diesem Beispiel wird ein Modell (XML) verwendet, das Dienste (im Wesentlichen Dienstnamen, Namespaces und Liste von Vorgängen) beschreibt. Anschließend werden WCF-Dienste (Schnittstellen, Nachrichten, Fehler, Tests usw.) in C # .net generiert.

Paul Fryer
quelle
Die Website ist nicht mehr verfügbar und Ihre Antwort ist auch nicht hilfreich.
Emcoding