XSD2Codeは、現在 (2011 年に) 利用できる最高のツールだと思います。
私は最近、利用可能なツールを分析する作業で同じプロセスを経たので、VS2010に関連する最新の回答を提供すると思いました。
私たちの主な推進力は、xsd.exeが XSD 注釈から XML ドキュメントを生成しないことでした。これは、何百もの型定義があるため、必要でした。上記のすべてのツールと他のツールを試してみましたが、ほとんどが非推奨であるか、メンテナンスされていないか、VS2010 で利用可能な xsd.exe の現在の機能と一致しませんでした。
ただし、 Xsd2Codeは優れたツールであり、積極的にメンテナンスされているようです。上記のすべての機能を提供し、さらに多くの機能を提供します。CodePlex ページには、さまざまなオプションが出力に与える影響の優れた例もあります。
また、コンテキスト メニューの統合やカスタム ビルド ツール (つまり、プロジェクトで XSD を参照してカスタム ツールを指定すると、XSD を更新するとコードが自動的に更新されることを意味します) など、VS との緊密な統合も行われます。全体として、多くの作業を節約できました。
私が見た他のツールの簡単な要約:
- Dingo - Java により近いようです
- XSDCodeGen - カスタム ビルド ツールの作成方法に関するデモの詳細
- CodeXS - 非常に優れたツールですが、統合や機能が少なく、メンテナンスされていません
- XSDObjectGen - メンテナンスされなくなり、現在の xsd.exe よりも機能が少なくなります
- XSDClassGen - 見つかりませんでした
- OXM ライブラリ-このプロジェクトを参照することをお勧めします。これは維持され、優れた機能を備えています。
- LINQ to XSD - 非常にクールなプロジェクトですが、私が探していたものではありません
補遺:
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
必要に応じて、次の手順を実行して、生成されたコードを整理します。
- 正規表現置換 - 現在のプロジェクト、ケース、単語全体 - [System.Runtime.Serialization.DataContractAttribute(Name:b*=:b*:q,:b Namespace:b =:b*{:q})] with [DataContract(名前空間 = \1)]
- 置換 - 現在のプロジェクト、ケース、単語全体 - [System.Runtime.Serialization.DataMemberAttribute()]を[DataMember]に
- 正規表現置換 - 現在のプロジェクト、ケース、単語全体 - System.Nullable\<{:w}> with \1\?
- 正規表現の置換 - 開いているドキュメント、ケース、単語全体 - {:w}TYPE with \1
- 置換 - ドキュメント、ケース、単語全体 - System.DateTimeをDateTimeで開き、不足している using ステートメントを追加します
- 置換 - ドキュメント、ケース、単語全体を開く - [System.Xml.Serialization.XmlIgnoreAttribute()]を[XmlIgnore]に置き換える
- 置き換え - 現在のプロジェクト - System.Xml.Serialization.XmlArrayAttributeをXmlArrayに
- 置換 - 現在のプロジェクト - System.Xml.Serialization.XmlArrayItemAttributeをXmlArrayItemに
- 正規表現置換 - 現在のプロジェクト - ,[:Wh]+/// \<remarks/\> with ,
それが誰かを助けることを願っています。