2017-07-18 75 views
0

我有一个运行在.Net 4.6下的WinForms应用程序(x64)。 我使用XslCompiledTransform来操作使用XSLT文件的一些XML文件。
XSLT转换是并行做了很多的XML文件如下:XslCompiledTransform加载方法抛出'拒绝访问异常'

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:\用户\ erezk \应用程序数据\本地的\ Temp \ iapqiwqu.tmp”被拒绝。

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

有没有人遇到过这个?

回答

0

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

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

相关问题