Мы столкнулись с проблемой загрузки Xslt в нашей производственной среде.Мой коллега проверил производственный код и воспроизвел проблему на своем компьютере.Однако он не мог это исправить.Итак, я решил написать пример консольного приложения для тестирования на моем компьютере.Я сделал, и не было никаких проблем.После этого мы реализовали мой подход к производственному коду и протестировали его на компьютере моего коллеги, но он снова вышел из строя.После этого я отправил пример приложения консоли своему коллеге, и он снова рухнул на его компьютер, но я хотел бы напомнить, что он работает на моем компьютере.Поэтому он установил мою версию .Net Core с нуля, но образец консольного приложения снова вышел из строя.Необходимая информация приведена ниже.
Часть примера консольного приложения:
... some code to initialize to access object storage
XslCompiledTransform xslTransformer = new XslCompiledTransform();
byte[] data = sm.Get("some-key").GetAwaiter().GetResult(); // gets data from objects storage
var doc = XmlHelper.CreateXmlDocument(data); // create xml document
var nodeList = doc.GetElementsByTagName("cbc:EmbeddedDocumentBinaryObject"); // get xslt in base64 format from xml document
var asBytye = Convert.FromBase64String(nodeList[0].InnerXml); // convert base64 xslt to byte[] xslt
// byte length and initial data are the same we have checked
//load xslt to transformer
using (var reader = new MemoryStream(asBytye))
using (var sr = new StreamReader(reader, Encoding.UTF8)) // we have tried other encodings
using (XmlReader xr = XmlReader.Create(sr))
{
xslTransformer.Load(xr); // here my machine gets no exception, however, the other machine get the error below
}
.. some code
Вот функция CreateXmlDocument
:
public static XmlDocument CreateXmlDocument(byte[] dataAsByte)
{
XmlDocument document = new XmlDocument
{
PreserveWhitespace = true
};
using (MemoryStream memoryStream = new MemoryStream(dataAsByte, false))
{
document.Load(memoryStream);
}
return document;
}
Вот трассировка стека:
Exception has occurred: CLR/System.Xml.Xsl.XslTransformException
An unhandled exception of type 'System.Xml.Xsl.XslTransformException' occurred in System.Private.Xml.dll: 'Unsupported option 'descendingOrder' in collation.'
at System.Xml.Xsl.Runtime.XmlCollation.Create(String collationLiteral, Boolean throwOnError)
at System.Xml.Xsl.IlGen.StaticDataManager.DeclareCollation(String collation)
at System.Xml.Xsl.IlGen.XmlILVisitor.VisitSortKey(QilSortKey ndKey, LocalBuilder locKeys)
at System.Xml.Xsl.IlGen.XmlILVisitor.VisitSort(QilLoop ndSort)
at System.Xml.Xsl.Qil.QilVisitor.Visit(QilNode n)
at System.Xml.Xsl.IlGen.XmlILVisitor.Visit(QilNode nd)
at System.Xml.Xsl.IlGen.XmlILVisitor.StartForBinding(QilIterator ndFor, OptimizerPatterns patt)
at System.Xml.Xsl.IlGen.XmlILVisitor.StartBinding(QilIterator ndIter)
at System.Xml.Xsl.IlGen.XmlILVisitor.VisitLoop(QilLoop ndLoop)
at System.Xml.Xsl.Qil.QilVisitor.Visit(QilNode n)
at System.Xml.Xsl.IlGen.XmlILVisitor.Visit(QilNode nd)
at System.Xml.Xsl.IlGen.XmlILVisitor.NestedVisit(QilNode nd, Type itemStorageType, Boolean isCached)
at System.Xml.Xsl.IlGen.XmlILVisitor.NestedVisit(QilNode nd)
at System.Xml.Xsl.IlGen.XmlILVisitor.VisitConditional(QilTernary ndCond)
at System.Xml.Xsl.Qil.QilVisitor.Visit(QilNode n)
at System.Xml.Xsl.IlGen.XmlILVisitor.Visit(QilNode nd)
at System.Xml.Xsl.IlGen.XmlILVisitor.NestedVisit(QilNode nd, Type itemStorageType, Boolean isCached)
at System.Xml.Xsl.IlGen.XmlILVisitor.VisitSequence(QilList ndSeq)
at System.Xml.Xsl.Qil.QilVisitor.Visit(QilNode n)
at System.Xml.Xsl.IlGen.XmlILVisitor.Visit(QilNode nd)
at System.Xml.Xsl.IlGen.XmlILVisitor.NestedVisit(QilNode nd, Type itemStorageType, Boolean isCached)
at System.Xml.Xsl.IlGen.XmlILVisitor.NestedVisit(QilNode nd)
at System.Xml.Xsl.IlGen.XmlILVisitor.Function(QilFunction ndFunc)
at System.Xml.Xsl.IlGen.XmlILVisitor.Visit(QilExpression qil, GenerateHelper helper, MethodInfo methRoot)
at System.Xml.Xsl.XmlILGenerator.Generate(QilExpression query, TypeBuilder typeBldr)
at System.Xml.Xsl.XslCompiledTransform.CompileQilToMsil(XsltSettings settings)
at System.Xml.Xsl.XslCompiledTransform.LoadInternal(Object stylesheet, XsltSettings settings, XmlResolver stylesheetResolver)
at System.Xml.Xsl.XslCompiledTransform.Load(XmlReader stylesheet)
at Test.Program.Main(String[] args)
Вот вывод dotnet --info
:
.NET Core SDK (reflecting any global.json):
Version: 2.1.403
Commit: 04e15494b6
Runtime Environment:
OS Name: Windows
OS Version: 10.0.16299 // only this is different between two computers
OS Platform: Windows
RID: win10-x64
Base Path: C:\Program Files\dotnet\sdk\2.1.403\
Host (useful for support):
Version: 2.1.5
Commit: 290303f510
.NET Core SDKs installed:
2.1.403 [C:\Program Files\dotnet\sdk]
.NET Core runtimes installed:
Microsoft.AspNetCore.All 2.1.5 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.App 2.1.5 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.NETCore.App 2.1.5 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]