XslCompiledTransform.Load()提升系统.IO.FileNotFoundException

本文关键字:系统 IO FileNotFoundException Load XslCompiledTransform | 更新日期: 2023-09-27 17:48:49

我的Web应用程序(ASP.NET 2.0)使用Web服务(1.1框架上的asmx)在同一台机器上。在得到XML作为回报后,我将其传递给XslCompiledTransform用于将XML转换为HTML,并且工作良好。

昨天我经常收到System.IO.FileNotFoundException,不知道是什么原因导致了这种问题。

首先,我认为这是关于c:''windows''temp的读/写权限,然后我确保授予它网络服务的完全权限(最后也是Everyone),但是这无济于事。

任何想法或解决方案都将不胜感激。

-------------------- stack trace --------------------------
Exception: **System.IO.FileNotFoundException**
**Could not find file 'C:'WINDOWS'TEMP'sivvt5f6.dll'.**
   at System.IO.__Error**.WinIOError**(Int32 errorCode, String maybeFullPath)
   at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 
rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
   at Microsoft.CSharp.CSharpCodeGenerator.FromFileBatch(CompilerParameters options, String[] fileNames)
   at Microsoft.CSharp.CSharpCodeGenerator.FromDomBatch(CompilerParameters options, CodeCompileUnit[] ea)
   at Microsoft.CSharp.CSharpCodeGenerator.System.CodeDom.Compiler.ICodeCompiler.CompileAssemblyFromDomBatch(CompilerParameters options, CodeCompileUnit[] ea)
   at System.CodeDom.Compiler.CodeDomProvider.CompileAssemblyFromDom(CompilerParameters options, CodeCompileUnit[] compilationUnits)
   at System.Xml.Xsl.Xslt.Scripts.CompileAssembly(List`1 scriptsForLang)
   at System.Xml.Xsl.Xslt.Scripts.CompileScripts()
   at System.Xml.Xsl.Xslt.QilGenerator.Compile(Compiler compiler)
   at System.Xml.Xsl.Xslt.**Compiler.
Compile**(Object stylesheet, XmlResolver xmlResolver, QilExpression& qil)
   at System.Xml.Xsl.XslCompiledTransform.LoadInternal(Object stylesheet, XsltSettings settings, XmlResolver stylesheetResolver)
   at System.Xml.Xsl.**XslCompiledTransform.Load**(String stylesheetUri, XsltSettings settings, XmlResolver stylesheetResolver)

XslCompiledTransform.Load()提升系统.IO.FileNotFoundException

在检查详细信息并在谷歌上搜索相关主题后,

  1. 在中发现此问题。Transform(),并且也发生在XmlSerialization中,正如Marc所说。Christoph Schittko有一篇关于故障排除的好文章
  2. 有人说这个问题可能是因为windows的一些更新补丁可以改变序列化程序的行为。

    我打电话给我的管理员,澄清我们的服务器是否有任何更改,他说没有任何更改,并建议我重新启动。

    是的。。。我的问题已经通过…重新启动服务器(windows 2003;)解决了

好吧,这是一个有趣的问题。我在序列化程序中看到过类似的问题,但在XslCompiledTransform中没有看到。

从标题中,我预计这将是加载包含/导入的转换的问题,这可能可以通过提供XmlResolver来解决。找不到自己生成的dll是非常奇怪的!

作为权宜之计(当您调查该问题时),您可能想看看XslTransform是否仍然存在这种情况。我意识到这并不理想(考虑到XslCompiledTransform中的优化等),但它至少可以让你的应用程序在你调查时工作。。。

我要做的第一件调查性的事情就是查看事件日志。有什么有趣的吗?同样值得检查的是,你的防病毒软件是否没有出现误报(不太可能)。

我要做的下一件事是隔离应用程序,即删除1.1的内容,因为你是通过asmx页面(到一个单独的应用程序)调用它的,它不应该是一个因素,所以你应该(理论上)能够从一个平面xml文件中复制它。理想情况下,最好在项目中有一个页面(为了简单起见,可能是一个ashx),只是尝试从本地文件进行转换。

它可以用简单的xslt/xml复制吗?你越简单地生成有问题的代码,就越接近于找到/修复它,或者拥有可以通过"连接"向MS发送的东西。

非常感谢Marc的回复。

我的xsl文件没有可引用的外部资源(无include,import),因此不应调查XmlResolver。

转换在其他服务器(我有2台服务器)和这个服务器中都很好,在我做了iisreset之后,它又开始工作了。但不到一个小时,它又来了。我确实检查了事件查看器,它记录了与我得到的相同的错误!!

----------------从事件查看器-------------事件类型:警告

事件来源:ASP。净2.0.50727.0事件类别:Web事件事件ID:1309日期:2008年7月11日时间:下午2:07:37用户:不适用计算机:XXXX说明:事件代码:3005事件消息:发生了未处理的异常。活动时间:2008年11月7日下午2:07:37事件时间(UTC):2008年7月11日上午7:07:37事件ID:f17058f2126c4a4b1742a3099010b0事件顺序:25407事件发生次数:276事件详细代码:0

流程信息:进程ID:1128进程名称:w3wp.exe帐户名:NT AUTHORITY''NETWORK SERVICE

异常信息:异常类型:FileNotFoundException异常消息:找不到文件"C:''WINDOWS''TEMP''irdt-y8o.dll"。…..

关于故障排除的一些想法:

  • dll文件是否已创建?例如,您可以使用Sysinternals中的Filemon来检查XSLT是否真的编译过
  • 有足够的可用磁盘空间吗
  • 临时文件夹中有多少个文件?%TMP%中的文件太多可能有问题
  • 机器上还有什么在运行?像Antivirus这样可以清理Temp文件夹的东西吗

我在Windows Server 2003上遇到了同样的问题。我们的ASP。NET应用程序正在使用web服务(在web上的外部机器上),过了一段时间我们就会收到此错误消息。

在应用程序池上运行回收可以解决问题,但我正在寻找问题原因的答案。

有人吗?