2010-05-12 4 views
3

Je suis en train de générer du code C# à partir d'un schéma XML avec xsd.exe avec RC1 Visual Studio (version 10.0.30128.1), mais obtenir l'erreur follwoing:StackOverflowException lors de la génération du code C# de xsd en utilisant xsd.exe (VS2010)

C: \ développement> xsd CR2008Schema.xsd/cours Microsoft (R) Xml schemas/DataTypes utilitaire de support [Microsoft (R) .NET Framework, version 4.0.30128.1] Copyright (C) Microsoft Corporation. Tous droits réservés

Le processus est interrompu en raison de StackOverflowException.

Le xsd est http://www.businessobjects.com/products/xml/CR2008Schema.xsd

Toute aide appréciée.

Merci,

Staffan

+0

Eh bien, au moins, vous n'avez pas reçu d'exception OutOfMemoryException ! :) – leppie

Répondre

4

Cela se produit probablement parce que Group définit une collection de 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 est d'entrer dans une boucle infinie ...

3

Suite à La réponse d'Oded il y a une boucle similaire mais plus complète dans le type CrystalReport. L'élément Details de type Details contient un élément SubReport de type Subreport, qui hérite de CrystalReport, qui contient un élément Details de type Details etc.

+0

Merci beaucoup pour la réponse rapide! Ça a du sens. Cela signifie-t-il qu'il n'y a aucun moyen de générer le code C# correct? Cela fonctionne quand je supprime Group et Subreport et cela devrait être suffisant pour moi maintenant mais je suis curieux ... – Staffan

+0

Vous pourriez créer manuellement les classes, mais vous pourriez rencontrer des problèmes en les sérialisant en XML car il y a un potentiel pour un référence circulaire. par exemple. L'objet A du groupe de types possède une propriété Group du groupe de types qui fait référence à l'objet B. Si la propriété de groupe de l'objet B faisait référence à l'objet A, vous auriez alors une référence circulaire. Vous ne pourriez jamais sérialiser cela comme cela continuerait pour toujours. –

Questions connexes