2009-01-04 9 views
4

J'essaie de convertir un objet XmlSchema en chaîne.
Je construis un XmlSchema simple, la compilation, puis la conversion comme suit:L'écriture d'un XmlSchema dans un MemoryStream échoue avec une exception lors de l'exécution de Nunit

public string ConvertXmlSchemaToString(XmlSchema xmlSchema) 
{ 
     String schemaAsString = String.Empty; 
     // compile the schema 
     XmlSchemaSet schemaSet = new XmlSchemaSet(); 
     schemaSet.Add(xmlSchema); 
     schemaSet.ValidationEventHandler += new ValidationEventHandler(schemaSet_ValidationEventHandler); 
     schemaSet.Compile(); 

     // allocate memory for string output 
     MemoryStream memStream = new MemoryStream(1024); 
     xmlSchema.Write(memStream); 
     memStream.Seek(0, SeekOrigin.Begin); 
     StreamReader reader = new StreamReader(memStream); 
     schemaAsString = reader.ReadToEnd(); 
     return schemaAsString; 
} 

Lors de l'exécution comme une application de la console, tout fonctionne bien, mais lors de l'exécution de Nunit je reçois une exception dans le " xmlSchema.Write (memStream); " ligne.

exception est: Une erreur est survenue lors de la génération du document XML.

L'exception interne est: Common Language Runtime a détecté un programme non valide.

Répondre

2

Vous ne corrigerez probablement pas votre problème, mais vous voudrez peut-être envelopper les flux autour de vos flux.

// allocate memory for string output 
using (MemoryStream MemStream = new MemoryStream(1024)) 
{ 
    xmlSchema.Write(MemStream); 
    MemStream.Seek(0, SeekOrigin.Begin); 
    using (StreamReader reader = new StreamReader(MemStream)) 
    { 
     SchemaAsString = reader.ReadToEnd(); 
    } 
} 
return SchemaAsString; 

De cette façon, les flux sont éliminés correctement. C'est peut-être ce dont NUnit se plaint.