Две одинаковые настроенные среды ядра .net дают разные результаты при нагрузке скомпилированного преобразования xslt - PullRequest
0 голосов
/ 13 ноября 2018

Мы столкнулись с проблемой загрузки 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]

1 Ответ

0 голосов
/ 13 ноября 2018

Проблема была в культуре.Мы использовали один из поддерживаемых здесь .Теперь это работает.

Отдельное спасибо @Tim C

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...