这正在使用命名空间Telerik.Reporting.ReportPacker
XML输入永远不会更改,以下函数用于将XML转换为Telerik对象,然后转换为字节数组。
以下Senario的行为符合预期:
var packing1 = GetTelerikReportFromXML(report.ReportXml);
var sha1 = FileHasher.Hash(packing1);
var sha1Try2 = FileHasher.Hash(packing1);
两个SHA1散列都相同。
但是,如果重新启动应用程序,则ReportPacker的输出将得到不同的结果(字节数组大小相同,但不同)。
与字节数组进行比较,似乎总是8个字节。
有人知道如何使ReportPacker每次产生相同的输出吗?
我已经确认输入XML不会改变。所以它不是散列或输入
static byte[] GetTelerikReportFromXML(string xmlContent)
{
var settings = new System.Xml.XmlReaderSettings { IgnoreWhitespace = true };
Report telerikReport;
using (var xmlReader = XmlReader.Create(new StringReader(xmlContent), settings))
{
var xmlSerializer = new ReportXmlSerializer();
telerikReport = (Report)xmlSerializer.Deserialize(xmlReader);
using (var ms = new MemoryStream())
{
var reportPacker = new ReportPackager();
reportPacker.Package(telerikReport, ms);
return ms.ToArray();
}
}
}