【问题标题】:How to get cs files for xml schemas (xsd)如何获取 xml 模式 (xsd) 的 cs 文件
【发布时间】:2011-08-18 09:54:38
【问题描述】:

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

我有 3 个 xsd 文件(A.xsd、B.xsd 和 Common.xsd)。 A 和 B 都有 Common 作为导入。我试过“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”选项)。

有人有想法吗?

提前致谢。

【问题讨论】:

    标签: c# xsd


    【解决方案1】:

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

    试试这个:

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

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

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

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

    如果您喜欢上面的选项 2,那么这里是一般过程:

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

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

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

    希望这会有所帮助。

    【讨论】:

    • 好的,它可以工作,但所有内容都在一个文件中。我的目标是每个模式有一个 cs 文件。
    • 有扩展答案请看。
    • 我已经考虑过您的第一个选项。但是,在我看来,自动操作之后的手动操作很棘手。实际上,您的第二个选择要复杂得多,但效果很好。你的过程帮助了我,非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-10
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    • 2010-11-14
    • 2017-01-03
    相关资源
    最近更新 更多