У меня есть код, который работал годами, но недавно прекратил работу после обновления до Windows 10 v1709.Функция IXSLProcessor.addParameter перестала работать при использовании процессора, возвращаемого XSLTemplate60.CreateProcessor ().Вот простой фрагмент консоли, который показывает проблему:
C #:
class Program
{
static void Main(string[] args)
{
FreeThreadedDOMDocument60 oXSLDocument = new FreeThreadedDOMDocument60();
XSLTemplate60 oXSLTemplate = new XSLTemplate60();
IXSLProcessor oXSLProcessor;
oXSLDocument.load(@"ParameterTest.xslt");
oXSLTemplate.stylesheet = oXSLDocument;
oXSLProcessor = oXSLTemplate.createProcessor();
oXSLProcessor.input = new DOMDocument60();
Console.WriteLine("\nThis should say that the value of myParameter is \"Default\":");
oXSLProcessor.transform();
Console.WriteLine(oXSLProcessor.output);
oXSLProcessor.addParameter("myParameter", "Override");
Console.WriteLine("\nThis should say that the value of myParameter is \"Override\":");
oXSLProcessor.transform();
Console.WriteLine(oXSLProcessor.output);
Console.WriteLine();
Console.ReadKey();
}
}
XSLT:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" omit-xml-declaration="yes" indent="no" />
<xsl:param name="myParameter" select="'Default'" />
<xsl:template match="/">
My parameter is set to: <xsl:value-of select="$myParameter" />
</xsl:template>
</xsl:stylesheet>
Токовый выход:
This should say that the value of myParameter is "Default":
My parameter is set to: Default
This should say that the value of myParameter is "Override":
My parameter is set to: Default
Как я уже говорил, раньше это работало правильно, и я могу воссоздать правильное поведение, используя Windows 10 v1603.Единственный совет, который я могу найти в отношении того, что может происходить, - это KB4088776 с марта прошлого года, в котором упоминаются исправления безопасности для библиотеки MSXML.Кто-нибудь знает, что я могу сделать, чтобы сделать эту работу снова, не включая переключение используемой библиотеки XML / XSL?