У меня есть приложение .net, которое я хочу перенести на Mono.
Приложение берет xml-файл, проверяет его и «выполняет» xml.
Часть проверки не работает на Mono. XML проверяет XSD.
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationEventHandler += new System.Xml.Schema.ValidationEventHandler(XmlValidationEventHandler);
settings.ValidationType = ValidationType.Schema;
settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
settings.Schemas.Add("http://eltrade.com/" + m_Schema, XmlReader.Create(stream));
stream.Close();
Console.WriteLine("Create xmlValidationReader");
// Validate the XML with XS
using (XmlReader xmlValidationReader = XmlReader.Create(m_document, settings))
{
try
{
Console.WriteLine("Begin xml validation");
while (xmlValidationReader.Read())
{
Console.WriteLine(xmlValidationReader.ReadInnerXml());
Console.WriteLine("---");
}
}
catch (XmlSchemaException SE)
{
m_success = false;
Console.WriteLine("XmlSchemaException: " + SE.Message + " " + SE.SourceSchemaObject.SourceUri);
}
catch (XmlException XE)
{
m_success = false;
Console.WriteLine("XMLException: " + XE.Message + " " + XE.SourceUri);
}
catch (Exception E)
{
m_success = false;
Console.WriteLine("Exception: " + E.Message);
}
}
Когда я запускаю проверку (вышеуказанная функция), читается только первая строка xml и выдается исключение: Невозможно привести исходный тип к целевому типу. Невозможно привести объект типа «System.UInt32» к типу «System.Int64».
<bons xmlns="http://eltrade.com/schema-file-driver.xsd">
<receipt id="10">
<type>
<nonfiscal/>
</type>
<prints>
<line>
<text>Free text at the top of receipt.</text>
<wordwrap>true</wordwrap>
</line>
<payments>
<pay1>all</pay1>
</payments>
</prints>
</receipt>
</bons>
На Windows с .Net Framework все работает нормально.
В Mono (в Linux и Windows) проверка вызывает вышеприведенное исключение.
Использование Mono v.2.4.2.3 на компьютере Linux (kubuntu) и
Mono v.2.6.4 на компьютере с Windows.
Что может быть причиной исключения?
<bons xmlns="http://eltrade.com/schema-file-driver.xsd">
не содержит числовых значений для приведения его к Int64.