web-dev-qa-db-ja.com

XSDコードジェネレーターの比較

私はxsdスキーマファイルからのコード生成の研究をしています。私の要件:

  • 必要に応じて汎用コレクションを使用して、C#2.0コード(またはそれ以上)を生成する必要があります。
  • Xsdコメントからコメントを生成する必要があります
  • 完全にシリアル化可能なコードを生成する必要があります。
  • 同じインクルードを持つ複数のxsdから生成するときに、再利用可能なベースタイプを生成できる必要があります。

(他の質問も参照してください: 一般的なインクルードを使用してxsdから複数のクラスを生成するにはどうすればよいですか? および wsdlのxs:documentationタグからコメントを生成するにはどうすればよいですか

次のオプションが見つかりました。

  1. Xsd.exeを使用します(SDKおよびVisual Studioに付属)
  2. Daniel Cazzulino のXSDCodeGen
  3. Xsd2Code
  4. CodeXS
  5. XsdObjectGen Microsoftによる
  6. XSDClassGen (実際には欠落しているようです)

私は何かを見逃しましたか? (1)、(2)、(5)は2.0コードを生成しないため、(3)のコードをシリアル化する際に問題が発生するためです。コードを生成するときに何を使用しますか?

74
edosoft

XSD2Code が現在利用可能な最高のツールであると考えています(2011年)。

私は最近、利用可能なツールを分析する仕事で同じプロセスを経験したので、VS2010に関連する更新された答えを提供すると思いました。

私たちの主なドライバーは、xsd.exeがXSDアノテーションからXMLドキュメントを生成しないことでした。上記のすべてのツールと他のツールを試してみましたが、ほとんどは非推奨であるか、メンテナンスされていないか、VS2010で使用可能なxsd.exeの現在の機能と一致しません。

Xsd2Codeただし、優れたツールであり、積極的に保守されているようです。上記にリストされたすべての機能とそれ以上の機能を提供します-CodePlexページには、さまざまなオプションが出力にどのように影響するかの素晴らしい例もあります。

また、コンテキストメニューの統合やカスタムビルドツールを含む、緊密なVS統合も備えています(つまり、プロジェクトでXSDを参照してカスタムツールを指定すると、XSDの更新時にコードが自動的に更新されます)。全体として、多くの作業を節約できました。

私が見た他のツールの簡単な要約:

  • Dingo -Javaにより整合しているようです
  • XSDCodeGen-カスタムビルドツールの作成方法に関するデモの詳細
  • CodeXS -かなり優れたツールですが、統合、機能が少なく、メンテナンスされていません
  • XSDObjectGen-メンテナンスされなくなり、現在のxsd.exeよりも機能が少なくなりました
  • XSDClassGen-それを見つけることができませんでした
  • OXMライブラリ -推奨このプロジェクトを見て、維持された素晴らしい機能
  • LINQ to XSD -非常にcoolプロジェクトですが、探していたものではありません

補遺:XSD2Codeを使用することにした場合、コマンドラインツールでの作業で見つかったいくつかの問題があります。特に、引数の処理にはいくつかのバグがあり、いくつかの引数を特定の順序にする必要があります。また、ドキュメント化されていない依存関係もあります(たとえば、自動パラメーターと.NETバージョンは順序に依存します)。以下は、XSD2Codeを使用してコードを生成し、出力をクリーンアップするために使用した手順です-必要に応じて適用されるビットを取得します。

次のバッチファイルを実行して初期コードを生成し、パスを正しい場所に変更します。

@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

必要に応じて、次の手順を実行して、生成されたコードを整理します。

  1. 正規表現の置換-現在のプロジェクト、ケース、Word全体-[System.Runtime.Serialization.DataContractAttribute(Name:b * =:b *:q、:b Namespace:b =:b * {:q})] with [DataContract(Namespace =\1)]
  2. 置換-現在のプロジェクト、ケース、Word全体-[System.Runtime.Serialization.DataMemberAttribute()][DataMember]
  3. Regex replace-現在のプロジェクト、ケース、Word全体-System.Nullable\<{:w}>with\ 1 \?
  4. 正規表現置換-ドキュメント、ケース、Word全体を開く-{:w} TYPEwith\ 1
  5. 置換-ドキュメント、ケース、Word全体を開く-System.DateTimeDateTimeに置き換え、欠落しているusingステートメントを追加
  6. 置換-ドキュメント、ケース、Word全体を開く-[System.Xml.Serialization.XmlIgnoreAttribute()][XmlIgnore]
  7. 置換-現在のプロジェクト-System.Xml.Serialization.XmlArrayAttributewithXmlArray
  8. 置換-現在のプロジェクト-System.Xml.Serialization.XmlArrayItemAttributewithXmlArrayItem
  9. 正規表現置換-現在のプロジェクト-、[:Wh] + ///\<remarks/\>with

それが誰かを助けることを願っています。

60
Xcalibur

私はまだこれをチェックアウトしていませんが、 Linq2XSD は便利な代替手段かもしれません。

これを試してみます。 XSD生成を備えたLINQは、これらのツールのどれよりも優れているでしょう。

8
Simon_Weaver

OpenSourceプロジェクト XSDからClasses は完璧に機能しました。

3
Stef Heyenrath

OxmLibraryを試す- http://oxmlibrary.codeplex.com

2
maor

私は1年以上前にCodeXSを使用したプロジェクトです。いくつかのマイナーな調整(生成されたコードを少しクリーンアップするスクリプト)で、それは魅力的でした。

Dingo もあり、非常に優れた拡張機能を備えています(これは必要ありませんでした)。

2
Steen

私が見つけた最高のXSDクラスジェネレーターは thinktecture WSCF.blue です。次の2つの理由により、他のほとんどの製品よりも優れています。

  1. ネーミングを修正。それは、型とプロパティ名の大文字小文字の区別と複数化を意味します。
  2. クラスごとに個別のファイルを作成します。

または、T4ソリューションを探している場合は、 XsdClassGen を試すことができます。これは私のために働いていません。しかし、良いニュースは、T4ファイルであるため、簡単に修正できることです。

0
Josh Mouch