XslCompiledTransform.Load()引发System.IO.FileNotFoundException
我的webapp(ASP.NET 2.0)在同一台机器上使用webservice(1.1框架上的asmx) 。获得XML后,我将它传递到 XslCompiledTransform
用于将XML转换为HTML,并且工作正常。XslCompiledTransform.Load()引发System.IO.FileNotFoundException
昨天我经常收到System.IO.FileNotFoundException
,不知道是什么原因导致了这类问题。
第一次看,我认为这是关于C:\ WINDOWS \ TEMP的读/写权限,然后我确定给它的网络服务的全部权限(也是最后的每个人 - - !)但 它并没有帮助。
任何想法或解决方案将不胜感激。
-------------------- 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
。
从标题中,我期待它是一个加载包含/导入转换的问题,这可能通过提供XmlResolver
来解决。没有发现自己生成的dll很奇怪!
作为一个障碍(当你调查问题时),你可能想看看它是否仍然发生在XslTransform
。我知道这是不理想的(给予XslCompiledTransform
优化等),但它可能至少让你的应用程序工作,而你调查...
我会做的第一个调查的事情是看事件日志。有什么有趣的?还值得检查一下,如果您的防病毒软件没有发生误报(不太可能),就会发生误判。
我会做的下一件事是隔离应用程序 - 即剪掉1.1的东西 - 因为你通过asmx页面调用它(到一个单独的应用程序)它不应该是一个因素,所以你应该(理论上)只能从一个平坦的xml文件重现它。理想情况下,最好在你的项目中有一个页面(可能是ashx),只是试图从本地文件进行转换。
是否可以用简单的xslt/xml重现?你可以更简单地制作出有问题的代码,或者找到/修复它,或者通过“连接”可以在MS上触发某些内容。
非常感谢Marc的回复。
我的xsl文件没有外部资源被引用(不包括,导入),因此不应该调查XmlResolver。
该变换在其他服务器(我有2个服务器),并在此服务器, 罚款后,我做了iisreset,它再次得到作品。但在一小时之前,它又来了。 我没有检查事件查看器,它记录了我得到的同样的错误!
----------------事件查看器------------- 事件类型:警告
事件来源:ASP。 NET 2.0.50727。0 事件类别:Web事件 事件ID:1309 日期:2008年11月7日 时间:下午2点07分37秒 用户:N/A 计算机:XXXX 描述: 事件代码:3005 事件消息:发生未处理的异常。 事件时间:2008年11月7日下午2点07分37秒 事件时间(UTC):2008年11月7日上午07点07分37秒 事件ID:f17058f2126c4a4abb1742a3099010b0 事件序列:25407 事件发生:276 事件详细信息代码:0
进程信息: 进程ID:1128 进程名:w3wp.exe 帐户名:NT AUTHORITY \ NETWORK SERVICE
异常信息: 异常类型:FileNotFoundException异常 异常信息:无法找到文件'C:\ WINDOWS \ TEM P \ irdt-y8o.dll”。 .....
检查细节和谷歌上搜索了相关主题之后,
- 这个问题.Transform发现(),也可以作为马克表示,与XmlSerialization occures。 Christoph Schittko有一篇关于troubleshooting的好文章。
-
有人说这个问题可能是因为一些更新补丁的windows可以改变串行器的行为。
我打电话给管理员澄清我们的服务器是否有任何变化,他说没有任何变化,他建议我重新启动。
和是...我的问题已经由.....重新启动服务器解决(的Windows 2003;)
+1我们遇到了与XslCompiledTransform完全相同的错误(在C:\ Windows \ Temp中找不到DLL文件)。它通过服务器重启来修复。 – 2013-01-24 22:21:40
只是一些想法进行故障排除:
- 是DLL文件产生的?你可以检查例如与Sysinternals的Filemon一起查看XSLT是否实际编译。
- 是否有足够的可用磁盘空间?
- 临时文件夹中有多少个文件?可能有太多文件存在问题%TMP%
- 机器上还运行着什么?任何可能会清理Temp文件夹的Antivirus?
我在Windows Server 2003上遇到同样的问题。我们的ASP.NET应用程序正在使用Web服务(在Web上的外部计算机上),过了一会儿,我们收到此错误消息。
在应用程序池中运行回收可修复问题,但我正在寻找问题原因的答案。
有人吗?
好奇。我假设所有3具有相同的配置(特别是在主web.config/machine.config中的临时目录设置)? – 2008-11-07 08:00:57