76

xsdスキーマファイルからのコード生成について調査しています。私の要件:

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

(他の質問も参照してください:共通のインクルードを持つxsdから複数のクラスを生成するにはどうすればよいですか?また、wsdlのxs:documentationタグからコメントを生成するにはどうすればよいですか?

私は次のオプションを見つけました:

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

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

4

7 に答える 7

62

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

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

  1. 正規表現置換 - 現在のプロジェクト、ケース、単語全体 - [System.Runtime.Serialization.DataContractAttribute(Name:b*=:b*:q,:b Namespace:b =:b*{:q})] with [DataContract(名前空間 = \1)]
  2. 置換 - 現在のプロジェクト、ケース、単語全体 - [System.Runtime.Serialization.DataMemberAttribute()][DataMember]に
  3. 正規表現置換 - 現在のプロジェクト、ケース、単語全体 - System.Nullable\<{:w}> with \1\?
  4. 正規表現の置換 - 開いているドキュメント、ケース、単語全体 - {:w}TYPE with \1
  5. 置換 - ドキュメント、ケース、単語全体 - System.DateTimeDateTimeで開き、不足している using ステートメントを追加します
  6. 置換 - ドキュメント、ケース、単語全体を開く - [System.Xml.Serialization.XmlIgnoreAttribute()][XmlIgnore]に置き換える
  7. 置き換え - 現在のプロジェクト - System.Xml.Serialization.XmlArrayAttributeXmlArrayに
  8. 置換 - 現在のプロジェクト - System.Xml.Serialization.XmlArrayItemAttributeXmlArrayItemに
  9. 正規表現置換 - 現在のプロジェクト - ,[:Wh]+/// \<remarks/\> with ,

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

于 2011-01-19T03:09:35.813 に答える
9

これはまだチェックしていませんが、Linq2XSDが便利な代替手段になる可能性があります。

これを試してみます。XSD生成を使用したLINQは、あなたが言及したこれらのツールのどれよりも優れています-それがうまく機能する場合.

于 2009-07-04T00:03:29.083 に答える
3

クラスへのオープンソース プロジェクトXSD は、私にとって完璧に機能しました。

于 2011-08-04T15:46:03.300 に答える
2

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

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

于 2008-12-22T12:50:55.257 に答える
2

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

于 2010-12-05T22:14:22.687 に答える
0

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

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

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

于 2011-10-20T00:57:43.080 に答える
-2

XSLT を使用して XML を C# コードに変換するWeb ベースの例を次に示します。この例では、サービス (基本的にはサービス名、名前空間、操作のリスト) を記述するモデル (XML) を使用し、WCF サービス (インターフェイス、メッセージ、障害、テストなど) をすべて C#.net で生成します。

于 2012-04-26T15:20:27.610 に答える