我有一个WinForms应用程序(x64)在.Net 4.6下运行。我使用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调用的临时文件之一。
以前有人遇到过这种情况吗?
发布于 2017-07-25 08:12:39
XslCompiledTransform类有一个名为TemporaryFiles的属性。这将包含在成功的Load调用期间创建的临时文件的文件名。这个属性的文档(https://msdn.microsoft.com/de-de/library/system.xml.xsl.xslcompiledtransform.temporaryfiles(v=vs.110).aspx说用户可以在调用Load之后删除它们)。所以我不认为它们是自动删除的。因此,如果不是这样,这个属性就没有意义了。
所以也许你应该试着在锁块里自己删除它们。
https://stackoverflow.com/questions/45171318
复制相似问题