【问题标题】:JIT Compiler encountered an internal limitation. VS2008JIT 编译器遇到内部限制。 VS2008
【发布时间】:2009-10-13 00:28:37
【问题描述】:

我一直在使用 XslCompiledTransform,因为 Microsoft 告诉我需要使用,因为 XslTransform 已弃用。

<ExactDatetime>200-02-02</ExactDatetime>) 使用 XslTransform 工作

<ExactDatetime>200-02-02</ExactDatetime>) 使用 XslCompiledTransform 失败

<ExactDatetime></ExactDatetime>) 使用 XslTransform 工作

作品:

XslTransform xslDoc = new XslTransform(); 
xslDoc.Load(xslPath); 
xslDoc.Transform(doc, Response.Output); 

JIT 失败(使用日期示例 200-02-02 时)

XslCompiledTransform xslDoc = new XslCompiledTransform(); 
xslDoc.Load(xslPath); 
xslDoc.Transform(doc, new XmlTextWriter(Response.Output)); 

JIT 编译器遇到内部限制。

说明:在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.InvalidProgramException:JIT 编译器遇到内部限制。

来源错误:

Line 33:            //xslDoc.Transform(doc, Response.Output); 
Line 34: 
Line 35:             xslDoc.Transform(doc, new XmlTextWriter(Response.Output)); 
Line 36:         } 
Line 37:   } 

源文件:c:\shahid\ccr_test\test1\Default.aspx.cs 行:35

堆栈跟踪:

[InvalidProgramException: JIT Compiler encountered an internal limitation.] 
   <xsl:template name="date:_format-date">(XmlQueryRuntime {urn:schemas-microsoft-com:xslt-debug}runtime, IList`1 year, IList`1 month, IList`1 day, IList`1 hour, IList`1 minute, IList`1 second, IList`1 timezone, IList`1 pattern) +0 
   <xsl:template name="date:format-date">(XmlQueryRuntime {urn:schemas-microsoft-com:xslt-debug}runtime, XPathNavigator date-time, XPathNavigator pattern) +5170 
   <xsl:template match="DateTime" name="dateTime">(XmlQueryRuntime {urn:schemas-microsoft-com:xslt-debug}runtime, XPathNavigator {urn:schemas-microsoft-com:xslt-debug}current, IList`1 dt, XPathNavigator fmt) +12397 
   <xsl:template match="/">(XmlQueryRuntime {urn:schemas-microsoft-com:xslt-debug}runtime, XPathNavigator {urn:schemas-microsoft-com:xslt-debug}current) +46057 
   Root(XmlQueryRuntime {urn:schemas-microsoft-com:xslt-debug}runtime) +91 
   Execute(XmlQueryRuntime {urn:schemas-microsoft-com:xslt-debug}runtime) +28 
   System.Xml.Xsl.XmlILCommand.Execute(Object defaultDocument, XmlResolver dataSources, XsltArgumentList argumentList, XmlSequenceWriter results) +88 
   System.Xml.Xsl.XmlILCommand.Execute(Object defaultDocument, XmlResolver dataSources, XsltArgumentList argumentList, XmlWriter writer, Boolean closeWriter) +193 
   System.Xml.Xsl.XmlILCommand.Execute(XmlReader contextDocument, XmlResolver dataSources, XsltArgumentList argumentList, XmlWriter results) +28 
   System.Xml.Xsl.XslCompiledTransform.Transform(String inputUri, XmlWriter results) +81 
   _Default.Button1_Click(Object sender, EventArgs e) in c:\shahid\ccr_test\test1\Default.aspx.cs:35 
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +111 
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +110 
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10 
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13 
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36 
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565 

【问题讨论】:

  • 你的日期应该是 2000-02-02 吗?
  • 你的 xsl 用那个 节点做什么?

标签: c# asp.net visual-studio-2008 xslt


【解决方案1】:

我遇到了同样的问题,我认为是同一个样式表 (CCR)。

问题是编译后的 XSLT 拒绝访问 document() 函数,并且没有正确处理错误。在 XslCompiledTransform.Load() 调用中,传入允许使用文档函数的 XsltSettings 对象。像这样的:

myTransform.Load(filename,XsltSettings.TrustedXslt,new XmlUrlResolver());

【讨论】:

  • 太棒了,同样的问题,同样的 CCR.xslt,同样的解决方案。非常感谢!顺便说一句,这里有 date:format-date 函数的更新版本:exslt.org/date/functions/format-date/…
【解决方案2】:

看起来format-date 函数以一种以前没有的方式在无效日期值上爆炸。在不了解更多细节的情况下,很难对原因进行理论化。您是导入 EXSLT 库还是使用 MSXML 中内置的库?

无论哪种方式,您都可能需要使用实用程序函数包装这些调用,该实用程序函数在调用 format-date 之前验证值以防止异常。

【讨论】:

    猜你喜欢
    • 2014-09-19
    • 2020-03-06
    • 2015-12-20
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    • 2010-11-03
    • 1970-01-01
    相关资源
    最近更新 更多