XslCompiledTransform加载方法throw'访问被拒绝异常'

时间:2017-07-18 15:35:17

标签: c# .net winforms xslt xslcompiledtransform

我有一个在.Net 4.6下运行的WinForms应用程序(x64)。 我使用XslCompiledTransform来使用XSLT文件操作某些XML文件 对于许多XML文件,XSLT转换是并行完成的,如下所示:

Parallel.ForEach(totalBusWorkingFolderFileItem, po, (xsltPath, loopState) =>
{
     XmlTextWriter transformedXml = new XmlTextWriter(stringWriter);
    // Create a XslCompiledTransform to perform transformation   
    XslCompiledTransform xsltTransform = new XslCompiledTransform();
    XsltSettings settings = new XsltSettings()
    {
        EnableDocumentFunction = true,
        EnableScript = true
    };
    lock (xsltCompilerLocker)
    {
        xsltTransform.Load(xsltPath, settings, new XmlUrlResolver());
    }
    xsltTransform.Transform(xmlReader, argsList, transformedXml);

    ... (Do something with transformedXml)
}

据我从MSDN了解,Load方法在%TEMP%文件夹下创建临时文件(如果在XslCompiledTransform对象上启用了脚本),这些文件在调用{{{方法已完成。
我的问题是,即使锁定Load方法,我也得到了以下异常:

  

访问路径' C:\ Users \ erezk \ AppData \ Local \ Temp \ iapqiwqu.tmp'被拒绝。

此文件是生成Load调用的临时文件之一。

之前有没有人遇到过这个?

1 个答案:

答案 0 :(得分:0)

XslCompiledTransform类有一个名为TemporaryFiles的属性。这将包含在成功Load调用期间创建的临时文件的文件名。此属性的文档(https://msdn.microsoft.com/de-de/library/system.xml.xsl.xslcompiledtransform.temporaryfiles(v=vs.110).aspx)表示用户可以在调用Load后删除它们。所以我不认为它们会被自动删除。因此,这个属性不会有意义。

所以也许你应该尝试在锁定区内自己删除它们。