XslCompiledTransform.Load()引发System.IO.FileNotFoundException

时间:2008-11-07 05:08:01

标签: c# xslcompiledtransform

我的webapp(ASP.NET 2.0)使用web服务(asmx on 1.1 framework) 在同一台机器上。在获得XML之后,我将其传递给了  XslCompiledTransform用于将XML转换为HTML并且工作正常。

昨天我经常收到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)

5 个答案:

答案 0 :(得分:4)

查看详细信息并搜索相关主题后,

  1. 使用.Transform()发现了这个问题,并且正如Marc所说,也发生了XmlSerialization。 Christoph Schittko为troubleshooting撰写了一篇很好的文章。
  2. 有人说问题可能是因为某些更新的Windows补丁可以改变序列化程序的行为。

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

    和是......我的问题已经通过.....重启服务器(Windows 2003;)

  3. 解决了

答案 1 :(得分:1)

好的,这是一个有趣的。我已经看到了序列化程序的类似问题,但没有专门针对XslCompiledTransform

从标题中,我期待加载包含/导入的转换是一个问题,这可能是通过提供XmlResolver来修复的。没有找到自生成的dll是非常奇怪的!

作为一个权宜之计(当您调查此问题时),您可能希望查看它是否仍然与XslTransform一起发生。我意识到这不是理想的(考虑到XslCompiledTransform中的优化等),但它可能至少让你的应用在调查时工作......

我要做的第一件调查是查看事件日志。有什么有趣的吗?另外值得一试的是你的反病毒软件是不是因为误报而疯狂(不太可能)。

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

使用简单的xslt / xml是否可以重现?你可以更简单地制作有问题的代码,你越接近找到/修复它,或者你可以通过“连接”触发MS。

答案 2 :(得分:1)

非常感谢Marc的回复。

我的xsl文件没有要引用的外部资源(不包含,导入),因此不应调查XmlResolver。

转换在其他服务器(我有2个服务器)以及此服务器中运行良好 在我做了iisreset之后,它又重新开始了。但在一个小时之前,它又来了。 我确实检查了事件查看器,它记录了我得到的相同错误!!

来自事件查看器的

---------------- ------------- 事件类型:警告

事件来源:ASP.NET 2.0.50727.0 活动类别:网络活动 事件ID:1309 日期:2008年11月7日 时间:下午2:07:37 用户:N / A. 电脑:XXXX 描述: 活动代码:3005 事件消息:发生了未处理的异常。 活动时间:11/7/2008 2:07:37 PM 活动时间(UTC):11/7/2008 7:07:37 AM 事件ID:f17058f2126c4a4abb1742a3099010b0 事件顺序:25407 事件发生:276 活动详细代码:0

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

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

答案 3 :(得分:1)

只是一些故障排除的想法:

  • 是否创建了dll文件?你可以检查,例如使用来自Sysinternals的Filemon查看是否实际编译了XSLT。
  • 是否有足够的可用磁盘空间?
  • 您的临时文件夹中有多少个文件? %TMP%
  • 中可能存在太多文件问题
  • 机器上还有什么?像防病毒这样的东西可能会清理Temp文件夹吗?

答案 4 :(得分:1)

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

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

任何?