Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用XSD生成XSD代码(C#):includes_C#_Xsd_Include - Fatal编程技术网

使用XSD生成XSD代码(C#):includes

使用XSD生成XSD代码(C#):includes,c#,xsd,include,C#,Xsd,Include,我在使用xsd.exe(与.NET SDK一起提供的)和Xsd2Code()生成代码时遇到问题 我有以下XSD文件设置: Common.xsd Summary.xsd Detail.xsd Common定义了一些在Summary和Detail中使用的类型,因此Summary和Detail都包括行 现在,我尝试的所有XSD代码生成工具的问题是,它们只接受具有顶级类型(所以是Summary/Detail)的XSD文件,并在一个名称空间中创建类 问题是,如果我使用这些工具,我会得到Common.x

我在使用xsd.exe(与.NET SDK一起提供的)和Xsd2Code()生成代码时遇到问题

我有以下XSD文件设置:

  • Common.xsd
  • Summary.xsd
  • Detail.xsd
Common定义了一些在Summary和Detail中使用的类型,因此Summary和Detail都包括行

现在,我尝试的所有XSD代码生成工具的问题是,它们只接受具有顶级类型(所以是Summary/Detail)的XSD文件,并在一个名称空间中创建类

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


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

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


请看一看,同样如此,它准确地显示了您需要执行的操作。

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

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

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

这可以防止排除包含的xml架构项。

这将非常酷,但开关根本不起作用(尽管我添加了它,但仍然会生成所有包含的类型)。@chrischu是否包含或导入了xsd文件?有一个微妙的区别,可能是抛出XSD2代码。。。