6

XmlSchema オブジェクトを文字列に変換しようとしています。
単純な XmlSchema を作成し、コンパイルしてから、次のように変換しています。

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;
}

コンソール アプリとして実行している間はすべて正常に動作しますが、Nunit から実行すると "xmlSchema.Write(memStream);" で例外が発生します。ライン。

例外: XML ドキュメントの生成中にエラーが発生しました。

内部例外: 共通言語ランタイムが無効なプログラムを検出しました。

4

1 に答える 1

4

おそらく問題は解決しませんが、usings をストリームに巻き付けたいと思うかもしれません。

// 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;

そうすれば、ストリームは適切に破棄されます。それがNUnitが不満を言っていることかもしれません。

于 2009-01-04T15:09:13.290 に答える