1

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

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
我的问题是,即使在锁定Load方法时,我也会遇到以下异常:

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

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

有没有人遇到过这个?

4

1 回答 1

0

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

因此,也许您应该尝试在锁定块内自行删除它们。

于 2017-07-25T08:12:39.403 回答