【问题标题】:StackOverFlowException when generating C# code from xsd using xsd.exe (VS2010)使用 xsd.exe (VS2010) 从 xsd 生成 C# 代码时出现 StackOverFlowException
【发布时间】:2010-05-12 10:42:13
【问题描述】:

我正在尝试使用 xsd.exe 和 Visual Studio RC1(版本 10.0.30128.1)从 XML 模式生成 C# 代码,但得到以下错误:

C:\Development>xsd CR2008Schema.xsd /classes Microsoft (R) Xml Schemas/DataTypes 支持实用程序 [Microsoft (R) .NET Framework,版本 4.0.30128.1] 版权所有 (C) 微软公司。版权所有

由于 StackOverflowException 而终止进程。

xsd 是http://www.businessobjects.com/products/xml/CR2008Schema.xsd

任何帮助表示赞赏。

谢谢,

工作人员

【问题讨论】:

  • 好吧,至少你没有像我以前那样得到 OutOfMemoryException! :)

标签: c# xsd.exe


【解决方案1】:

这可能是因为Group 定义了Group 的集合:

<!--    Group   -->
<xsd:complexType name="Group">
  <xsd:sequence>
    <xsd:element name="GroupHeader" type="HeaderFooter" minOccurs="0"/>
      <xsd:choice>
        <xsd:element name="Details" type="Details" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element name="Group" type="Group" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:choice>
    <xsd:element name="GroupFooter" type="HeaderFooter" minOccurs="0"/>
  </xsd:sequence>
  <xsd:attribute name="Level" type="xsd:integer" use="required"/>
</xsd:complexType>

xsd.exe 进入无限循环...

【讨论】:

    【解决方案2】:

    除了 Oded 的回答之外,CrystalReport 类型中还有一个类似但更复杂的循环。 Details 类型的 Details 元素包含一个 Subreport 类型的 SubReport 元素,它继承自 CrystalReport,其中包含 Details 类型的 Details 元素等。

    【讨论】:

    • 非常感谢您的快速回复!这就说得通了。这是否意味着无法生成正确的 C# 代码?当我删除组和子报表时它确实有效,现在这对我来说是否足够但我很好奇......
    • 您可以手动创建类,但您可能会遇到将它们序列化为 XML 的问题,因为存在循环引用的可能性。例如group 类型的对象 A 具有引用对象 B 的 group 类型的 Group 属性。如果对象 B 的 group 属性引用了对象 A,那么您将具有循环引用。你永远不能序列化它,因为它会永远持续下去。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    相关资源
    最近更新 更多