1

我在使用 xsd.exe(.NET SDK 提供的那个)和 Xsd2Code(http://xsd2code.codeplex.com/)生成代码时遇到问题。

我有以下 XSD 文件设置:

  • 通用.xsd
  • 摘要.xsd
  • 细节.xsd

Common 定义了一些在 Summary 和 Detail 中都使用的类型,因此 Summary 和 Detail 都包含该行<xs:include schemaLocation="Common.xsd" />

现在我尝试的所有 XSD 代码生成工具的问题是它们只采用顶级类型(即摘要/详细信息)的 XSD 文件并在 ONE 命名空间中创建类。

这样做的问题是,如果我使用这些工具,我会得到 Common.xsd 中每种类型的 2 个精确副本(Namespace.Summary.CommonType 和 Namespace.Detail.CommonType)。当我想在代码中使用它们时,我总是必须在它们之间进行转换(基本上只是复制所有值),这非常麻烦,并导致大量开销和混乱。

是否有任何 XSD 代码生成工具可以更好地处理包含(即将包含的类型放入自己的命名空间并且只生成一次)?

4

3 回答 3

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 不会将包含的模式类型生成到该文件中。

于 2012-04-25T13:26:32.170 回答
1

您应该尝试在命令行中列出所有 XSD 文件,它应该可以解决所有问题,但希望不适用于您的情况。

请看一下这篇文章,也在 SO 上,它准确地显示了你需要做的事情。

于 2012-04-25T13:08:16.923 回答
0

Xsd2Code 中的以下方法始终返回 true:

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

这可以防止排除包含的 xml 模式项。

于 2017-07-07T15:10:57.223 回答