2012-04-25 14 views
1

xsd.exe(.NET SDKに付属)とXsd2Code(http://xsd2code.codeplex.com/)を使用したコード生成に問題があります。XSDコード生成(C#)with xsd:

私はXSDファイルの以下の設定がありますCommon.xsd

  • Summary.xsd
  • Detail.xsd

共通するのは、両方の概要で使用されるいくつかのタイプを定義しますしたがって、概要と詳細の両方には、<xs:include schemaLocation="Common.xsd" />という行が含まれています。

私が試したすべてのXSDコード生成ツールの問題は、トップレベルタイプ(要約/詳細)のXSDファイルのみをとり、ONE名前空間でクラスを作成することです。

これらのツールを使用すると、Common.xsd(Namespace.Summary.CommonTypeおよびNamespace.Detail.CommonType)のすべての型の2つの正確なコピーが得られることになります。私がコードでそれらを使用したいとき、私はいつもそれらの間で変換する必要があります(基本的にすべての値をコピーするだけです)はかなり迷惑であり、かなりのオーバーヘッドと混乱を招きます。

処理するXSDコード生成ツールはありますか(つまり、組み込み型を独自の名前空間に入れて一度しか生成しません)。

答えて

1

すべてのXSDファイルをコマンドラインで表示するようにしてください。あなたの問題には当てはまらないシナリオがいくつかありますが、問題を解決するはずです。

また、this postを見てください。これはまた、あなたがする必要があることを正確に示しています。

1

Xsd2Codeは

xsd2code Common.xsd MyNamespace MyNamespace\Common.cs 
xsd2code Summary.xsd MyNamespace MyNamespace\Summary.cs /eit+ 
xsd2code Detail.xsd MyNamespace MyNamespace\Detail.cs /eit+ 

各XSDファイルは、必要に応じて(独自のソースコードファイルに生成されます..あなただけの名前空間を指定して、それぞれのXSDファイルのコマンドの複数のパスを実行する必要があり、このシナリオを処理します別の名前空間で)。/eit +スイッチは、xsd2codeがインクルードされたスキーマタイプをそのファイルに生成しないことを示します。

+1

これは本当にクールですが、スイッチはまったく動作しません(私はそれを追加しましたが、含まれているすべてのタイプが生成されます)。 – chrischu

+0

@chrischuはあなたのxsdファイルを含んでいるかインポートしていますか? xsd2codeをオフにする可能性のある微妙な違いがあります... – MattDavey

+0

これらは含まれています(元の質問に表示されているように)。 – chrischu

0

Xsd2Codeの以下のメソッドは常にtrueを返します:

Xsd2Code.Library.Extensions.CodeExtension.ContainsTypeName(XmlSchema schema, CodeTypeDeclaration type) 

これは、付属のXMLスキーマの項目を除外することを防ぐことができます。