2012-04-25 43 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架构的项目排除在外。