2012-04-25 94 views
1

我在使用xsd.exe(與.NET SDK一起提供的代碼)以及Xsd2Code(http://xsd2code.codeplex.com/)代碼生成時遇到問題。帶xsd的XSD代碼生成(C#):包括

我有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,同樣在SO上,它顯示了你需要做的事情。

1

Xsd2Code處理這種情況,你只需要運行的每個XSD文件的命令的多個通道,指定命名空間..

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

每個XSD文件將生成到它自己的源代碼文件(可選在不同的命名空間中)。/eit +開關表示xsd2code不會在該文件中生成包含的模式類型。

+1

這將是非常酷,但交換機根本不起作用(儘管我添加了它仍然包含所有生成的類型)。 – chrischu 2012-04-26 06:50:37

+0

@chrischu是你的xsd文件包含或導入?有一個微妙的差異,可能會拋出xsd2code ... – MattDavey 2012-04-26 09:06:37

+0

它們包括在內(如原始問題中所示)。 – chrischu 2012-04-26 13:55:43

0

在Xsd2Code下面的方法總是返回true:

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

這可以防止包括XML架構的項目排除在外。