如何获取xml架构的cs文件(xsd)

时间:2011-08-18 09:54:38

标签: c# xsd

我是C#developpment的新手,我想知道为每个XSD架构获取一个CS文件的过程。

我有3个xsd文件(A.xsd,B.xsd和Common.xsd)。 A和B都有Common作为import。我试过“xsd.exe”和“xsd2code.exe”但没有成功。

  • “XSD.EXE”

    1. 无法生成类,因为在“Common.xsd”中找不到具有复杂类型的顶级元素。
    2. 生成文件“A.cs”和“B.cs”,但每个文件中都包含“Common.xsd”的代码。
  • “xsd2code.exe”

    1. “Common.cs”很好地生成了我选择的命名空间“MyNamespace.Common”。
    2. 由于未指定类型,无法生成其他文件,但我使用“MyNamespace.Common”作为自定义使用(“/ cu”选项)。

有人有想法吗?

提前致谢。

1 个答案:

答案 0 :(得分:3)

您需要引用导入或包含链中的所有模式。

试试这个:

xsd /c A.xsd B.xsd Common.xsd 

编辑但是这意味着所有类都在一个文件中。

如果您希望将它们分成不同的文件,您有两种选择:

  1. 手动将它们分开。我知道这是一个生成的文件,但如果你的源模式是相当静态的,那么这是一次性的练习。
  2. 请改用svcutil.exe。然而,这要复杂得多,实际上除非你的模式都遵守某些指导原则,否则你甚至可能无法做到这一点。如果您有兴趣,请参阅下面的过程。
  3. 如果你喜欢上面的选项2,那么这里是一般过程:

    1. 使用svcutil上的/ dconly标志从Common.xsd中提取类型。这将生成一个包含常见类型的类文件。
    2. 将此类编译为程序集
    3. 使用/ r标志从A.xsd中提取类型并引用您的CommonTypes.dll程序集。
    4. 为B.xsd
    5. 做同样的事

      但是,这种方法基于使用DataContractSerializer的svcutil来完成工作,因为/ r标志对XmlSerializer不可用。这只有在你的模式遵守相当严格的DCS规则时才有效(可以在这里找到:http://msdn.microsoft.com/en-us/library/ms733112.aspx)。

      如果不遵守这些规则,则svcutil将回退到使用不支持/ r标志的XmlSerializer。

      希望这有帮助。