我有一个在.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
调用的临时文件之一。
之前有没有人遇到过这个?
答案 0 :(得分:0)
XslCompiledTransform
类有一个名为TemporaryFiles
的属性。这将包含在成功Load
调用期间创建的临时文件的文件名。此属性的文档(https://msdn.microsoft.com/de-de/library/system.xml.xsl.xslcompiledtransform.temporaryfiles(v=vs.110).aspx)表示用户可以在调用Load
后删除它们。所以我不认为它们会被自动删除。因此,这个属性不会有意义。
所以也许你应该尝试在锁定区内自己删除它们。