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:
- Verwenden Sie xsd.exe (im Lieferumfang des SDK und von Visual Studio enthalten).
- XSDCodeGen von Daniel Cazzulino
- Xsd2Code
- CodeXS
- XsdObjectGen von Microsoft
- 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?
c#
xsd
code-generation
edosoft
quelle
quelle
Antworten:
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:
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:
Hoffe das hilft jemandem.
quelle
Schalk Versteeg
als edit:XSDtoClasses
code.google.com/p/xsd-to-classes -Extendable VS plugin, very similar in capabilities to XSD2Code.
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.
quelle
Das OpenSource-Projekt XSD to Classes hat für mich perfekt funktioniert.
quelle
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).
quelle
Probieren Sie OxmLibrary - http://oxmlibrary.codeplex.com aus
quelle
Der beste XSD-Klassengenerator, den ich gefunden habe, ist thinktecture WSCF.blue . Es ist aus zwei Gründen schöner als die meisten anderen:
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!
quelle
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.
quelle